使用派生类实例作为参数重写方法

问题描述 投票:0回答:1

我有一个基类Item,在其中有一个抽象方法OnItemEquipped,它接受一个I​​tem并对该项目执行所有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,它接受一个I​​tem并对该项目执行所有Item共有的操作。目的是让我有...

c# overriding abstract
1个回答
0
投票

您可以出于此目的使用泛型。您应该首先定义可以充当约束的接口。

© www.soinside.com 2019 - 2024. All rights reserved.