是否可以在 C# 中定义内部类型的受保护属性?

Hoo*_*ini 3 c#

我想要InternalClassinternal在大会之外无法访问)

我还想定义protected类型的属性InternalClass(在同一程序集中)

这就是我所拥有的:

internal class InternalClass 
{
}
Run Code Online (Sandbox Code Playgroud)

现在我想在另一个类中使用这种类型,但它必须是protected

public class MyClass
{
   protected internal InternalClass IC { get; }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码给我以下错误:

可访问性不一致:属性类型“InternalClass”的可访问性低于属性“MyClass.IC”

当我检查文档时,我可以看到protected internal是一个有效的修饰符,但我不确定如何使用它?

Min*_*ipe 6

问题是,它MyClass是公共的,意味着外部类(另一个程序集中的一个)可以派生它,然后通过该属性访问内部类protected internal。这是因为protected internalprotectedinternal。来自微软文档

受保护的内部成员可以从当前程序集从包含类派生的类型访问。

(强调我的)

如果您想保持MyClass公开,那么您需要将其设置为InternalClassnot inside,或者通过将其设置为be来使该属性IC无法从外部访问。来自 MS 文档:ICprivate protected

私有受保护成员可由从包含类派生的类型访问,但只能在其包含程序集中访问

(强调我的)

这似乎是你想要的。