繁体   English   中英

C#调用接口方法默认实现

[英]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.

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