C# 我应该在调用继承的方法之前向上转换吗
我可能在这里做了一些错误的事情,但是我有一个基类和多个派生类C# 我应该在调用继承的方法之前向上转换吗,c#,unity3d,C#,Unity3d,我可能在这里做了一些错误的事情,但是我有一个基类和多个派生类 public abstract class BaseItem : MonoBehaviour { public void LevelUp() { // do some common thing ... maybe increase damage } } 在inventory manager中,我有一个所有项目的列表,可以对它们调用LevelUp方
public abstract class BaseItem : MonoBehaviour
{
public void LevelUp()
{
// do some common thing ... maybe increase damage
}
}
在inventory manager中,我有一个所有项目的列表,可以对它们调用LevelUp
方法。我认为问题在于,我有一个
的列表,而特定的类LevelUp
没有被调用:
public void LevelUpItem(string itemName)
{
var item = AvailableItems.First(w => w.ItemName.Equals(itemName));
item.LevelUp();
}
我最初的想法是,我需要在调用LevelUp函数之前向上投射该项。我的第二个想法是我在这里做错了什么
<>我的具体问题是“如何安全地上移”,我的问题是:“我应该考虑一种不同的多态性方法吗?” < P> > C中,你可以使用关键字(也有修改器,如果你不想有任何默认实现)的话:
并使用修改器更改继承器中的行为:
public class RangedWeapon: BaseItem
{
public override void LevelUp()
{
base.LevelUp();
// do specific things here... maybe increase range.
}
}
为什么不将基本方法标记为
virtual
和override
子方法(这是通常的方法)?我有点新。。。虚拟机是否允许默认实现?我明白了。。。我显然还不知道虚方法和非虚方法之间的区别。是的,虚方法只是更改派生类型的访问。在基础上设置公共虚拟void,在派生类型上设置公共重写void。Base仍然可以使用默认实现。谢谢Yall!有人回答我,我就接受。
public void LevelUpItem(string itemName)
{
var item = AvailableItems.First(w => w.ItemName.Equals(itemName));
item.LevelUp();
}
public abstract class BaseItem : MonoBehaviour
{
public virtual void LevelUp()
{
// do some common thing ... maybe increase damage
}
}
public class RangedWeapon: BaseItem
{
public override void LevelUp()
{
base.LevelUp();
// do specific things here... maybe increase range.
}
}