C# 如果父类是继承的类,如何获取父类?
让我们假设我有这个:C# 如果父类是继承的类,如何获取父类?,c#,.net,C#,.net,让我们假设我有这个: public class Item { public int ItemID; public List<Enchantment> Enchantments; //Enchantment is a class } public class Stick: Item { public int Damage = 18; public Stick() { ItemID = 4; } public v
public class Item
{
public int ItemID;
public List<Enchantment> Enchantments; //Enchantment is a class
}
public class Stick: Item
{
public int Damage = 18;
public Stick()
{
ItemID = 4;
}
public void Update()
{
foreach (Enchantment ItemEnchantment in Enchantments)
{
Enchantment.Update();
}
}
}
public class Enchantment
{
public int EnchantmentID;
public void Update()
{
//NEED HELP HERE
Parent.Damage += 2; //How do I know my parent is a (Stick)?
//I thought of giving each item a uniqueID, and two items cannot have the same id, so the enchantment checks the items list for a specific id, and then uses that as the parent class.
//But is there a more efficient way?
}
}
公共类项目
{
公共int ItemID;
公共列表附魔;//附魔是一个类
}
公共类:物品
{
公共int损害=18;
公共棍棒
{
ItemID=4;
}
公共无效更新()
{
foreach(附魔物品附魔中的附魔)
{
enchanment.Update();
}
}
}
公共级魔法
{
公共int-enchanmentid;
公共无效更新()
{
//这里需要帮助吗
Parent.Damage+=2;//我怎么知道我的父母是(棍子)?
//我想给每个物品一个唯一的id,两个物品不能有相同的id,所以附魔会检查物品列表中的特定id,然后将其用作父类。
//但是有没有更有效的方法呢?
}
}
我怎么知道我的父母是一个(棍子)?
我想给每个物品一个唯一的id,两个物品不能有相同的id,所以附魔会检查物品列表中的特定id,然后将其用作父类。
但是还有更有效的方法吗?
^考虑过展示自己的努力吗?我只是需要一种更有效的方法来实现这一点。这不是父类。你的
棍子
由魔法组成
简易路线:将杆
与以下方法一起传递:
// in Stick
foreach (Enchantment ItemEnchantment in Enchantments) {
ItemEnchantment.Update(this);
}
// in Enchantment..
public void Update(Stick stick) {
stick.Damage += 2;
}
<>为了使其更通用,考虑另一类实现<代码>损坏< /代码>修饰符:
public class ItemWithDamageModifier : Item {
public int Damage { get; set; }
}
然后从中继承:
public class Stick: ItemWithDamageModifier {
然后您可以使用我的上述方法,如下所示:
public void Update(ItemWithDamageModifier damageItem) {
damageItem.Damage += 2;
}
public class Enchantment
{
public int EnchantmentID;
//a property, that contains the damage given by the Enchantment
//so, when constructing an Enchantment
//you should set it to some certain value
public int Damage { get; set; }
}
然后,您可以使用DamageModifier
传入任何继承的项,例如棍子
,或员工
,或枪
,等等。这不是父类。你的棍子
由魔法组成
简易路线:将杆
与以下方法一起传递:
// in Stick
foreach (Enchantment ItemEnchantment in Enchantments) {
ItemEnchantment.Update(this);
}
// in Enchantment..
public void Update(Stick stick) {
stick.Damage += 2;
}
<>为了使其更通用,考虑另一类实现<代码>损坏< /代码>修饰符:
public class ItemWithDamageModifier : Item {
public int Damage { get; set; }
}
然后从中继承:
public class Stick: ItemWithDamageModifier {
然后您可以使用我的上述方法,如下所示:
public void Update(ItemWithDamageModifier damageItem) {
damageItem.Damage += 2;
}
public class Enchantment
{
public int EnchantmentID;
//a property, that contains the damage given by the Enchantment
//so, when constructing an Enchantment
//you should set it to some certain value
public int Damage { get; set; }
}
然后,您可以通过DamageModifier传入继承物品的任何东西,例如棍子,或棍子,或枪,等等。附魔不应该知道物品类的任何信息,否则它闻起来像是一个非常糟糕的设计。你最好有这样的smth:
public void Update(ItemWithDamageModifier damageItem) {
damageItem.Damage += 2;
}
public class Enchantment
{
public int EnchantmentID;
//a property, that contains the damage given by the Enchantment
//so, when constructing an Enchantment
//you should set it to some certain value
public int Damage { get; set; }
}
在任何类中都不需要Update
方法,而是:
int BaseDamage = 18; //a base damage of the item
//the fact damage, i.e. sum of the base one and all the enchantments
public int Damage
{
get
{
int encDamage = 0;
if (Enchantments.Any())
encDamage += Enchantments.Sum(e => e.Damage);
return BaseDamage + encDamage;
}
}
enchanment
不应该知道物品
类的任何信息,否则它闻起来像是一个非常糟糕的设计。你最好有这样的smth:
public void Update(ItemWithDamageModifier damageItem) {
damageItem.Damage += 2;
}
public class Enchantment
{
public int EnchantmentID;
//a property, that contains the damage given by the Enchantment
//so, when constructing an Enchantment
//you should set it to some certain value
public int Damage { get; set; }
}
在任何类中都不需要Update
方法,而是:
int BaseDamage = 18; //a base damage of the item
//the fact damage, i.e. sum of the base one and all the enchantments
public int Damage
{
get
{
int encDamage = 0;
if (Enchantments.Any())
encDamage += Enchantments.Sum(e => e.Damage);
return BaseDamage + encDamage;
}
}
我会提出一个比两个建议答案(都是合理的)更激进的建议。我会退后一步,问一个问题:“谁在这里负责?”也就是说,什么代码位实际上代表了游戏规则
你要走的路是把游戏规则放到每个物体上;对象计算其自身的损坏。但是现在一些其他的代码将不得不考虑如果怪物抵抗附魔,或者是装甲,或者其他任何东西会发生什么
在这种情况下,我更喜欢的方法是创建一组规则对象,这些对象实际上编码了游戏规则。这样就有了明确的责任;物品负责告诉规则引擎它们拥有什么附魔,规则引擎会计算出发生了什么。我想如果你选择这种方法,你会发现你的很多问题都会消失 我会提出一个比两个建议答案(都是合理的)更激进的建议。我会退后一步,问一个问题:“谁在这里负责?”也就是说,什么代码位实际上代表了游戏规则
你要走的路是把游戏规则放到每个物体上;对象计算其自身的损坏。但是现在一些其他的代码将不得不考虑如果怪物抵抗附魔,或者是装甲,或者其他任何东西会发生什么
在这种情况下,我更喜欢的方法是创建一组规则对象,这些对象实际上编码了游戏规则。这样就有了明确的责任;物品负责告诉规则引擎它们拥有什么附魔,规则引擎会计算出发生了什么。我想如果你选择这种方法,你会发现你的很多问题都会消失 你说的“父母”是什么意思?我在你的代码中没有看到“家长”。@John哦,谢谢你。父项是棍子(列表中附魔的父项),但我想得到拥有该附魔的物品ENCHANTMENT@COLD父项是一根棍子,但它也是一个项目。请确保您的实现正确处理用户同时拥有+2和×2附魔的情况。具体来说,附魔顺序不影响附魔效果。我见过的一个解决方案是有一个BaseDamage
成员。你说的“家长”是什么意思?我在你的代码中没有看到“家长”。@John哦,谢谢你。父项是棍子(列表中附魔的父项),但我想得到拥有该附魔的物品ENCHANTMENT@COLD父项是一根棍子,但它也是一个项目。请确保您的实现正确处理用户同时拥有+2和×2附魔的情况。具体来说,附魔顺序不影响附魔效果。我见过的一个解决方案是拥有一个基本伤害成员。这看起来很聪明,但是对于附魔,我不知道该物品是否是一根棍子。我怎么知道?也许我可以给每根棍子分配一个id,然后将该id转换为一个项目?例如:棍子是1,剑是2,盾是3。。。然后我就