我需要声明一个受保护 AND 内部的成员。然而,就我完全的困惑而言,我刚刚发现“受保护的内部”实际上意味着受保护的OR内部的困难方式。是否有任何访问修饰符意味着受保护的 AND 内部?
答案 0 :(得分:6)
受保护的AND内部在C#(或任何其他高级.NET语言afaik)中不可用。虽然CLR支持它,但可以在IL中实现。
答案 1 :(得分:6)
虽然在{C#中CLR supports it,但是无法强制成员受到内部保护。
C#和VB.NET都使用联合而不是交集来组合访问修饰符。
如果你必须拥有它,有一个解决方法。它不干净,但它的工作原理。您可以在其上创建一个带有内部属性的辅助类,然后将该内部类类型的受保护属性添加到您的类中。受保护属性的内部属性只能在拥有程序集中的子类上访问。
示例如下。我已经使用了一个泛型,你可能想要多个不同类型的受保护内部属性。无论期望的属性类型如何,泛型都允许您使用一个内部类。
public class AccessHelper<T>
{
internal T Value { get; set; }
}
public class AClass
{
public AClass()
{
InternalProperty.Value = "Can't get or set this unless you're a derived class inside this assembly.";
}
protected AccessHelper<String> InternalProperty
{
get;
set;
}
}
答案 2 :(得分:3)
引用Equiso的链接:
顺便说一句,CLR确实有ProtectedANDInternal的概念,但C#没有语法来指定它。如果你看看CLR的System.Reflection.MethodAttributes枚举,你会看到FamANDAssem和FamORAssem(“Family”是CLR的C#受保护术语,“Assem”是C#的内部术语)。
答案 3 :(得分:1)
您无法在C#中定义受保护的AND内部成员,尽管CLR(MemberAttributes.FamilyAndAssembly
)支持
答案 4 :(得分:0)
内部类和受保护成员如何。