【问题标题】:InternalsVisibleTo with "private protected"InternalsVisibleTo 带有“私人保护”
【发布时间】:2018-05-15 10:18:43
【问题描述】:

.Net 框架和 C# 的新版本提供了新的访问修饰符:private protected。为了访问这样的成员,该类必须同时

  • 驻留在同一个程序集中并且
  • 派生自定义类。

(与protected internal 相比,满足其中一个条件就足够了)

出于测试目的,InternalsVisibleTo 属性在我想从位于不同程序集中的测试类中访问类的非公共成员时非常方便。

private protected 如何与InternalsVisibleTo 属性交互?我可以从派生自原始类的“朋友”程序集中的类中访问此类成员吗?

(我无法在我的机器上尝试,因为 Visual Studio 和 C# 的版本太旧了)。

【问题讨论】:

  • 好问题。我也无法对其进行测试,但我认为它也适用于private protected,尽管他们到处(例如herehere)都提到它仅适用于internal 成员。
  • 是的,正如你所描述的那样。

标签: c# internalsvisibleto c#-7.2


【解决方案1】:

是的,从基类派生的友好测试程序集中的类将可以访问private protected 成员。

新访问修饰符的proposal 明确说明了它映射到的CLR 访问说明符(protectedAndInternal),但没有说明它与InternalVisibleTo 的关系。

【讨论】:

  • 请引用。
  • @RobertHarvey C# 7.2 有正式规范吗?
  • @Rune 甚至 C# 6 仍然是草稿。 C# 开发已经完全开放,这意味着在 csharplang 存储库中的 Github 提案中描述了特性、辩论、原型化和实现。该提案的链接是最好的引用,仅次于 Roslyn 代码本身
【解决方案2】:

截至目前,InternalVisibleTo 的文档在备注部分提到了 internalprivate protected

(https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.internalsvisibletoattribute?view=netcore-2.2#remarks)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 2015-08-11
    • 2021-03-19
    • 2019-02-14
    • 2014-11-27
    • 2016-03-04
    • 1970-01-01
    相关资源
    最近更新 更多