gpt4 book ai didi

c# - tclass 扩展一个抽象类并使用相同的签名方法实现接口(interface)

转载 作者:太空宇宙 更新时间:2023-11-03 21:18:36 24 4
gpt4 key购买 nike

我对抽象类和接口(interface)具有相同签名方法的这种情况感到困惑。派生类中会有多少个定义?调用将如何解决?

public abstract class AbClass
{
public abstract void printMyName();
}

internal interface Iinterface
{
void printMyName();
}

public class MainClass : AbClass, Iinterface
{
//how this methods will be implemented here???
}

最佳答案

在默认情况下只有一个实现,但如果您使用 void Iinterface.printMyName 签名定义方法,则可以有两个实现。看看关于 Difference between Implicit and Explicit implementations 的问题.你的样本也有一些错误

    AbClass 中的
  • printMyName 未标记为抽象,因此它应该有 body 。
  • 如果你想要 abstract method - 它不能是私有(private)的

-

public abstract class AbClass
{
public abstract void printMyName();
}

internal interface Iinterface
{
void printMyName();
}

public class MainClass : AbClass, Iinterface
{
//how this methods will be implemented here???
public override void printMyName()
{
Console.WriteLine("Abstract class implementation");
}

//You can implement interface method using next signature
void Iinterface.printMyName()
{
Console.WriteLine("Interface implementation");
}
}

public class MainClass_WithoutExplicityImplementation : AbClass, Iinterface
{
//how this methods will be implemented here???
public override void printMyName()
{
Console.WriteLine("Abstract class and interface implementation");
}
}

使用示例

var mainInstance = new MainClass();
mainInstance.printMyName(); //Abstract class implementation
Iinterface viaInterface = mainInstance;
viaInterface.printMyName(); //Interface implementation


var mainInstance2 = new MainClass_WithoutExplicityImplementation();
mainInstance2.printMyName(); //Abstract class and interface implementation
Iinterface viaInterface = mainInstance2;
viaInterface.printMyName(); //Abstract class and interface implementation

关于c# - tclass 扩展一个抽象类并使用相同的签名方法实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32392003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com