Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何限制对由其他公共接口实现的内部接口的访问_C#_.net_.net 4.0 - Fatal编程技术网

C# 如何限制对由其他公共接口实现的内部接口的访问

C# 如何限制对由其他公共接口实现的内部接口的访问,c#,.net,.net-4.0,C#,.net,.net 4.0,使用C#和NET4.0,我有两个实现内部接口(IMethod)的公共接口(IAsyncMethod和ISyncMethod),我需要将公共访问修饰符设置为前两个,将其设置为第三个设置为内部,因此我只能为另一个dll/project/developer启用这两个公共接口 internal interface IPaymentMethod { XmlDocument StartTransaction(XmlDocument parameters); XmlDocument QueryTran

使用C#和NET4.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'
如何设置修饰符以允许我需要的行为?

这不是“如何设置修饰符”的问题,而是继承基础的问题:让我们看看(在第三方代码中)

这是有效的,因为ISyncMethod继承自IMethod。这当然是不可能的,若我的方法无法访问的话

有效但不可能是一个组合,编译器不喜欢。

这不是一个“如何设置修饰符”的问题,而是一个继承基础的问题:让我们看看(在第三方代码中)

这是有效的,因为ISyncMethod继承自IMethod。这当然是不可能的,若我的方法无法访问的话


有效但不可能是一个组合,编译器不喜欢。

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

想想看——只有某些类型是从程序集导出的;如果作为程序集使用者,向您展示了这些类型,并且将
IMethod
接口列为接口,那么您将被难住,因为您希望在某处找到该接口的声明。但既然是内在的,你就不会


同样,如果类型/接口上的可见性修饰符可以被继承/实现类型破坏,那么它们的可见性修饰符又有什么意义呢?

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

想想看——只有某些类型是从程序集导出的;如果作为程序集使用者,向您展示了这些类型,并且将
IMethod
接口列为接口,那么您将被难住,因为您希望在某处找到该接口的声明。但既然是内在的,你就不会

同样,如果类型/接口上的可见性修饰符可以被继承/实现类型破坏,那么它们的可见性修饰符又有什么意义呢

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