![](/img/trans.png)
[英]Can a C# class call an interface's default interface method from its own implementation?
[英]C# call interface method with default implementation
我有以下接口和类:
interface IMyInterface
{
void A();
void B()
{
Console.WriteLine("B");
}
}
class MyClass : IMyInterface
{
public void A()
{
Console.WriteLine("A");
}
}
我想实例化 MyClass 并像这样调用 B() :
MyClass x = new MyClass();
x.B();
但是,这不起作用,因为 MyClass 不包含“B”的定义。 有什么我可以添加到 MyClass 以便这段代码调用 IMyInterface 中 B() 的默认实现的吗?
我了解下面的代码有效,但我不想将数据类型从 MyClass 更改为 IMyInterface。
IMyInterface x = new MyClass();
x.B();
你不能那样做。 您必须实现您的类从它继承的接口。 但是您可以使用抽象类而不是接口。 像这样:
abstract class MyAbstract
{
public void A() { }
public void B()
{
Console.WriteLine("B");
}
}
class MyClass : MyAbstract
{
public new void A()
{
Console.WriteLine("A");
}
}
var x = new MyClass();
x.B();
也许这有点小技巧,但您可以使用类扩展将 B() 方法添加到每个实现 IMyInterface 的类中。
static class ImplIMyInterface
{
public static void B(this IMyInterface obj) => obj.B();
}
现在您可以在 MyClass 的实例上调用 B()。
你可以这样称呼它:
MyClass x = new MyClass();
(x as IMyInterface).B();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.