为什么内部保护并不比国内更加严格?(Why is internal protected not mo

2019-06-24 13:23发布

我想创建一个内部自动属性:

internal bool IP { get; protected internal set; }

我认为这将有可能使二传手protectedprotected internal -但我总是得到错误可访问性修饰符必须比属性更严格 。 是不是这样呢? Private并不能帮助我,在这里。

编辑:
现在的问题是:如何实现一个自动性能与内部getter和保护setter方法?

Answer 1:

它有效地protectedinternal ,不 。 这是双方在同一装配派生类和类型的访问。 这是一个普遍的误解,认为protected internal只在同一装配派生类可及的手段。



Answer 2:

在.NET水平,有两个相似,但不同的访问级别:

  • FamilyAndAssembly:比更严格的保护或者内部
  • FamilyOrAssembly:不是限制性更少保护或者内部

在C#“被保护的内部”是指FamilyOrAssembly; 没有修饰符FamilyAndAssembly。

所以,你的protected internal的setter比限制较少的internal整体性能。 你可以做的是:

protected internal bool IP { internal get; set; }

但是,那么你的二传手比你的getter,它是奇数较少受限制...

另一个(有点当量)替代方案是:

internal bool IP { get; set; }

protected void SetIP(bool ip)
{
    this.IP = ip;
}


Answer 3:

我认为这个作弊,因为埃里克利珀是SO自己,但他写了一个很好的博客贴子,认为这个问题。

为什么我不能访问受保护的成员从派生类,第三部分

最终,他的回答是大致相同这里的海报中给出的,但他的广告语言的和DESGIN这些功能的实现背后的一些有趣的推理。



Answer 4:

考虑什么乔恩斯基特提到的(和user59808的评论),就不会这样达到预期的效果?

protected internal bool IP { get; protected set; }



Answer 5:

protected internal限制较少比任何protectedinternal ,因为它同时允许它的子类( protected ),以及任何在同一组件( internal )访问的东西。



Answer 6:

在相同的组件类可见受保护的内部装置,或从含有类派生的类 - 换句话说,它是那些满足内部要求或受保护的要求,而不是与可见。 没有任何意义的保护访问修饰符和内部用这种方式。



Answer 7:

内部保护来保护或内部,而不是保护和内部。 因此,范围仅限于同一大会或派生类,不一定都。



Answer 8:

可访问性修饰符必须比属性更严格

内部是更限制性的该受保护:因为保护的东西可以看出(由子类)的组件的外部。

编译器说,有一个在说,没有意义的set保护(子类的装配外即可见),当整个IP属性是内部(即装配外部不可见)。



文章来源: Why is internal protected not more restrictive than internal?