2012-01-17 58 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

类型的所有基础和接口必须至少与该类型一样可见。所以内部/私有类型/接口可以继承/实现一个公共的;但不是相反。

想一想 - 只有某些类型从程序集中导出;如果您作为装配体消费者提供了这些类型的接口,并且将接口列为接口,那么您会被难住,因为您希望在某处找到该接口的声明。但既然是内在的,你就不会。

同样,如果可以通过继承/实现类型来破坏类型/接口上的可见性修饰符,它们会是什么?