繁体   English   中英

C# 接口使用子类型 class

[英]C# Interface using a child type class

假设我创建了这个接口:

interface Equipable
{
    public bool Equip(Equipment equipment);
}

让我们假设我们的Equipment class 现在是空的:

class Equipment
{

}

我从Equipment创建了一个派生的 class (让我们保持简单):

class Trinkets : Equipment
{
    ...
    public Trinkets(...)
    {
        ...
    }
}

然后我想要一个Trinket class 实现Equipable并使用它的方法:

class Trinket : Item, Equipable
{
    bool Equipable.Equip(Trinkets trinkets)
    {
        return true;
    }
}

但似乎我不能这样做(CS0539),我不能使用Trinkets class (但是它是Equipment派生类)作为我接口的方法参数。

这对我不起作用,而且似乎牵强: 在 interface 方法中使用父 class 的子 class 时实现接口 而且似乎上述解决方案不允许您使用接口 header 中声明的基本 class 以外的其他类。

所以我的问题很简单,有没有办法做我想做的事情? 这是不好的做法吗? 如果是,我应该怎么做才能克服这个问题?

根据您的描述,您需要一个接受对Equipment引用的接口。 在 C# 中,这意味着它可以接受 object 的 class 或任何派生的 ZA2F2ED4F8EBC2CBB4C21A29DC40AB6 方法调用。 这不包括方法实现。

所以Trinket应该这样声明:

class Trinket : Item, Equipable
{
    bool Equipable.Equip(Equipment equipment)
    {
        return true;
    }
}

但这允许您调用该方法,将 object 类型的EquipmentTrinkets作为派生的 class 的Equipment传递给它。 这是一个简单的例子:

var trs = new Trinkets();
var eq = new Equipment();

var tr = new Trinket();
tr.Equip(trs);

// Or
tr.Equip(eq);

inheritance 将适用于 object 参考,但在实施该方法时不起作用。

在线bool Equipable.Equip(Trinkets trinkets)

您在Equipable接口中指定所有实现Equipable的类都需要包含一个名为Equip的已定义方法,该方法接收一个Equipment参数并返回一个bool 您在Trinket class 中定义的方法接收到Trinket参数,因此它不会满足接口设置的条件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM