2011-03-31 100 views
11

我可以將實現接口的抽象類留空並且意味着接口中的所有方法/屬性在我的類中都是抽象的。看來我必須在抽象類中再次寫出它們,但我真的想避免這種重複。通過空抽象類實現的C#接口

我的理由是我有一些接口與不同的訪問器,一個公共的和一個內部的,我想集合在一起,所以我有一個抽象類,實現它們,然後可以擴展。

public interface ISomePublicProperties { 
    int PropertyOne {get;} 
} 

internal interface ISomeInternalProperties { 
    int PropertyTwo {get;} 
} 

public abstract class SomeClass : ISomePublicProperties, ISomeInternalProperties {} 

但是,編譯器抱怨SomeClass的未實現接口方法ISomePublicProperties.PropertyOne和ISomeInternalProperties.PropertyTwo

反正在C#(我知道Java允許這種),我可以離開這個抽象類實現空接口?

+0

您是否嘗試過創建'虛擬'存根方法來關閉編譯器? – FreeAsInBeer 2011-03-31 03:33:09

回答

15

沒有。在C#中,抽象類必須完全實現接口。注意它可以用抽象方法和抽象屬性來實現它。這是關於C#的一件小事,一直困擾着我。

+0

儘管您可以使用抽象屬性來實現,但您似乎無法使用抽象屬性實現*顯式*。以下內容抱怨抽象成員不能私有 - 「abstract int ISomePublicProperties.PropertyOne {get;}」。不幸的。 – yoyo 2014-06-06 17:28:35

3

要做到這一點的唯一方法是創建virtual屬性沒有實現。這些在派生類中被覆蓋。

public abstract class SomeClass : ISomePublicProperties, ISomeInternalProperties 
{ 
    public abstract int PropertyOne { get; } 
    internal abstract int PropertyTwo { get; } 
} 
+0

我想他想避免像'public abstract int Property {get; }' – aqwert 2011-03-31 03:41:32

+0

你當然是對的。我已經解決了我的答案。 – 2011-03-31 03:45:15

+0

感謝您的迴應,但我真的很想避免將接口複製到抽象類中 - 我只是希望抽象類是空的,並且類實現接口的擴展器。 – kevin 2011-03-31 03:46:41