我有一个基类Item,在其中有一个抽象方法OnItemEquipped,它接受一个Item并对该项目执行所有Item共有的操作。
目的是我将拥有多个派生类,例如Item_Consumable,它将覆盖基类中的抽象方法。问题是,我希望这个新方法将Item_Consumable用作参数,而不是Item。这是一个问题,因为编译器将抱怨该方法的签名不匹配。但是在我的派生实现中,我想使用Item_Consumable唯一的字段-否则,我只会在我的基类中实现整个方法,而根本不用重写。
这种问题的可接受的策略是什么?
从功能上讲,我的代码如下:
public class Item { public virtual void OnItemEquipped(Item item){ } } public class Item_Armour : Item { public float uniqueFloat; public override void OnItemEquipped(Item item){ UseUniqueFloat(uniqueFloat); } }
实际错误是:
'Item'不包含'protection'的定义,找不到可以接受的扩展方法'protection'接受类型为'Item'的第一个参数(是否缺少using指令或程序集引用?]
其中“保护”是我唯一的浮动对象。
我有一个基类Item,其中有一个抽象方法OnItemEquipped,它接受一个Item并对该项目执行所有Item共有的操作。目的是让我有...
您可以出于此目的使用泛型。您应该首先定义可以充当约束的接口。