题
我已经重构的代码的项目,我目前正在使这类/接口,这是没有用的范围以外的会应该被宣布为内(而不是公共)。但我遇到一个问题与下列代码:
internal interface IFirstInterface
{
...
}
internal interface ISecondInterface
{
IFirstInterface First{ get; }
...
}
public class Implementer : ISecondInterface
{
public IFirstInterface First {get; private set;}
...
}
我的问题:
为什么做成员的内部接口,必须要公开执行?如果实施该接口内部流,不应该实现的成员是内部?这不是一个大问题,因为该接口员会不会公开访问的,无论如何,鉴于这类是内部的。它似乎只是反直觉的。
主要的问题是与上述情况,因为我不能拥有一个公共吸气,为IFirstInterface因为这是据称的内部接口,即我得到的以下错误的编译器:
不一致的无障碍:酒店 类型'IFirstInterface'小 访问过酒店 '实施者。第一批'
是否有任何办法解决这个?
注意到:我意识到,有可能价值不在此重构的工作,但我认为这将是一个很好的方式对我来说更深入地了解所涉问题的内部改性剂。
解决方案
只要注意的-你的代码实际上已经设置 做 编纂,因为 Implementer
是一个内部的类。问题来的时候 Implementer
是公开的。
方圆,这是使用明确的界面实施:
public class Implementer : ISecondInferface
{
private IFirstInterface first;
IFirstInterface ISecondInterface.First { get { return first; } }
}
你不能拥有的装定在那里,因为你是明确实施的界面,没有定义的定者。你的 可能 此作为一种替代方法:
public class Implementer : ISecondInterface
{
internal IFirstInterface First { get; private set; }
IFirstInterface ISecondInterface.First { get { return First; } }
}
不幸的是,内部接口有公共成员-它不会复杂化,这样的事情。这将是奇怪的对公众的接口有一个内部成员(那会是什么内部的实施者或庄家?) 但对于内部接口,这使得更多的意义。
其他提示
为什么做成员的内部接口,必须要公开执行?
在定义一个接口,你没有定义的访问水平对成员,由于所有接口成员 public
.即使接口是这样 internal
, 成员仍然被认为 public
.当你让一个隐含的执行这样的一个成员签名必须相匹配,所以它需要 public
.
关于暴露在吸气,我建议做一个 明确 执行情况的界面,创建一个 internal
财产获得的价值:
internal IFirstInterface First { get; private set; }
IFirstInterface ISecondInterface.First
{
get { return this.First; }
}
我知道这篇文章是几岁,但我认为这是值得注意的是,你可以实现一个内部接口上的一个公共类,见以下链接:
http://forums.create.msdn.com/forums/p/29808/167820.aspx
http://msdn.microsoft.com/en-us/library/aa664591%28VS.71%29.aspx
例从第一链接:
internal interface ISecretInterface
{
string Property1 { get; }
}
public class PublicClass : ISecretInterface
{
// class property
public string Property1
{
get { return "Foo"; }
}
// interface property
string ISecretInterface.Property1
{
get { return "Secret"; }
}
}