我有以下爲什麼是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