簡體   English   中英

C#:抽象類需要實現接口嗎?

[英]C#: Abstract classes need to implement interfaces?

我在C#中的測試代碼:

namespace DSnA
{
    public abstract class Test : IComparable
    {

    }
}

導致以下編譯器錯誤:

error CS0535: 'DSnA.Test' does not implement interface member
'System.IComparable.CompareTo(object)'

由於類Test是一個抽象類 ,為什么編譯器要求它實現接口? 這個要求不應該僅僅是具體課程的必修課嗎?

在C#, 需要實現一個接口的類定義接口的所有成員。 在抽象類的情況下,您只需使用abstract關鍵字定義這些成員:

interface IFoo
{
    void Bar();
}

abstract class Foo : IFoo
{
    public abstract void Bar();
}

或者換句話說:你不必 “實現”它(這對抽象類來說是一個可怕的限制); 但是,在C#中,您必須告訴編譯器您是故意將降級傳遞給具體的子類 - 上面的代碼行顯示了如何執行此操作。

評論和支持者抱怨說這不是問題的答案,但卻忽視了這一點。 有人來到Stack Overflow,收到了這個編譯錯誤,但是有一個抽象類,其中提供一個實現是一個錯誤,沒有一個好的解決方案 - 將不得不編寫引發運行時異常的實現方法,一個可怕的工作 - 在他們擁有上述信息之前。 C#需要這種顯式性是好還是壞都超出了Stack Overflow的范圍,與問題和這個答案無關。

與Java不同,在C#中:“抽象類必須提供類的基類列表中列出的所有接口成員的實現。但是,允許抽象類將接口方法映射到抽象方法。”

https://msdn.microsoft.com/en-us/library/Aa664595(v=VS.71).aspx

他們不必實際實現接口
接口方法/屬性也可以是抽象的,甚至也可以是虛擬的。 所以它由子類來實際實現它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM