我有以下为什么是C#中的行为抽象类和接口?
public interface NomiInterface
{
void method();
}
public abstract class Nomi1
{
public void method()
{
}
}
public class childe : Nomi1, NomiInterface
{
}
现在成功编译的代码?为什么不需要重写childe类中的接口方法?
我有以下为什么是C#中的行为抽象类和接口?
public interface NomiInterface
{
void method();
}
public abstract class Nomi1
{
public void method()
{
}
}
public class childe : Nomi1, NomiInterface
{
}
现在成功编译的代码?为什么不需要重写childe类中的接口方法?
您需要接口的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 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。
您是否注意到接口定义了一个名为'mehtod'的方法,但抽象类定义了'method'? –
您是否尝试过新编辑的答案?因为它现在编译没有任何错误。你的问题是约翰·桑德斯写的。 – Kikaimaru
你不需要再次实现它,因为childe类已经有了从它的父Nomi1实现的“方法”方法。如果您想以其他方式实现它,请将Nomi1中的方法“虚拟”为虚拟并在childe类中覆盖它 – Kikaimaru