![](/img/trans.png)
[英]Using a interface as a type parameter of generic class with the limitation of “class” in C#
[英]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 类型的Equipment
或Trinkets
作为派生的 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.