2012-01-17 89 views
2

使用C#和NET 4.0,我有兩個實現內部接口(IMethod)的公共接口(IAsyncMethod和ISyncMethod),我需要將公共訪問修飾符前兩個,內部的第三個,所以我可以只爲另一個dll/project/developer啓用兩個公共接口。如何限制訪問由其他公共接口實現的內部接口

internal interface IPaymentMethod 
{ 
    XmlDocument StartTransaction(XmlDocument parameters); 
    XmlDocument QueryTransaction(XmlDocument parameters); 
} 

public interface ISyncMethod : IMethod 
{ 
    void EndTransaction(TransactionDTO parameter); 
} 

public interface IAsyncMethod : IMethod 
{ 
    void EndTransaction(TransactionDTO parameter); 
} 

當我生成項目,我收到這些錯誤:

Inconsistent accessibility: base interface 'IMethod' is less accessible than interface 'ISyncMethod' 
Inconsistent accessibility: base interface 'IMethod' is less accessible than interface 'IAsyncMethod' 

如何我將設置修飾符,讓我需要的行爲?

回答

3

這不是「如何設置調節劑」的問題,而是繼承基礎的問題:讓我們看看(第三方代碼)

ISyncMethod sm=new ClassImplementingISyncMethod(); 
IMethod m=(IMethod) sm; 

這是有效的,因爲ISyncMethod從繼承IMethod。如果IMethod不可訪問,則這是不可能的。

有效但不可能是一種組合,編譯器不喜歡。

0

類型的所有基礎和接口必須至少與該類型一樣可見。所以內部/私有類型/接口可以繼承/實現一個公共的;但不是相反。

想一想 - 只有某些類型從程序集中導出;如果您作爲裝配體消費者提供了這些類型的接口,並且將接口列爲接口,那麼您會被難住,因爲您希望在某處找到該接口的聲明。但既然是內在的,你就不會。

同樣,如果可以通過繼承/實現類型來破壞類型/接口上的可見性修飾符,它們會是什麼?