2012-08-09 61 views
1

我有一個內部抽象類InternalClassBase和兩個(也是內部)類InternalClass1InternalClass2,它們繼承自InternalClassBase與抽象類的不可訪問性

我也有一個公共抽象類PublicClassBase和兩個(也公開)班PublicClass1PublicClass2,從PublicClassBase繼承。

PublicClassBase具有InternalClassBase類型的保護構件XXX,這樣既PublicClass1PublicClass2可以使用它。

這是我的代碼:

internal abstract class InternalClassBase { } 
internal class InternalClass1 : InternalClassBase { } 
internal class InternalClass2 : InternalClassBase { } 

public abstract class PublicClassBase 
{ 
    protected InternalClassBase XXX; // this is where the error happens 
} 
public class PublicClass1 : PublicClassBase { } 
public class PublicClass2 : PublicClassBase { } 

爲什麼不能PublicClassBase包含在我的例子XXX成員?我認爲XXX只會在PublicClassBasePublicClass1PublicClass2之內可見,但不在其外。

我還以爲我的理解訪問修飾符,但很明顯,我不:)

編輯 - 錯誤發生在內部PublicClassBase XXX的聲明,異常消息是:可訪問性不一致:字段類型「ClassLibrary2 .InternalClassBase'不如字段'ClassLibrary2.PublicClassBase.XXX'可訪問,但受保護如何更容易訪問,然後內部?

回答

4

試想一下,在裝配其他不是從你的例子中,一個類型的聲明,聲明類PublicClass3PublicClassBase繼承。字段XXX應該從PublicClass3可見,因爲它是受保護的,但字段的類型是內部的,所以同時,應從PublicClass3可見而不是

很明顯,你不能同時擁有這兩個,因此錯誤。

您可以通過使您的字段private或製作PublicClassBase及其子internal來解決此問題。

+0

解決方法是將成員從'protected'更改爲'internal'。 – CodesInChaos 2012-08-09 11:34:12

+0

明白了,謝謝! – sventevit 2012-08-09 11:40:13

2

給出您提供給我的程序集,其中包含上面的類,我可以繼續在不同的程序集中創建一個子類PublicClassBase,該子程序引用了您的。

那堂課,我將不得不實施InternalClassBase類型的保護成員XXX - 顯然我不能,因爲InternalClassBase被標記爲internal