我的代码如下
public interface NomiInterface
{
void method();
}
public abstract class Nomi1
{
public void method()
{
}
}
public class childe : Nomi1, NomiInterface
{
}
现在编译成功了吗?为什么不需要覆盖childe类中的接口方法?
答案 0 :(得分:3)
您需要explicit implementation界面。抽象类方法method()
实现满足了实现抽象接口方法的需要。因此,在类childe
中定义接口的方法,但显式实现需要调用接口的方法而不是类。
public interface NomiInterface
{
void method();
}
public abstract class Nomi1
{
public void method()
{
Console.WriteLine("abstract class method");
}
}
public class childe : Nomi1, NomiInterface
{
void NomiInterface.method()
{
Console.WriteLine("interface method");
}
}
您可以测试如何调用childe中的抽象类和接口实现方法
childe c = new childe();
NomiInterface ni = new childe();
ni.method();
c.method();
输出
interface method
abstract class method
另一方面,如果你没有进行显式的接口实现,那么childe类中给出的实现将不会在childe或接口对象上调用。
public interface NomiInterface
{
void method();
}
public abstract class Nomi1
{
public void method()
{
Console.WriteLine("abstract class method");
}
}
public class childe : Nomi1, NomiInterface
{
void method() { Console.WriteLine("interface method"); }
}
像以前一样创建类和接口的对象。
childe c = new childe();
NomiInterface ni = new childe();
ni.method();
c.method();
您将获得的输出
abstract class method
abstract class method
作为附加说明,您将负责类/方法名称的命名约定。您可以找到有关命名约定here的更多信息。