访问修饰符- c# 's & protected internal"意味着“protected&quo
本文关键字:protected internal quot quo 意味着 访问 | 更新日期: 2023-09-27 17:49:21
我需要声明一个成员,它既是受保护的又是内部的。然而,让我完全困惑的是,我刚刚发现"内部保护"实际上是指内部保护或保护。是否有访问修饰符表示受保护的和是内部的?
虽然CLR支持,但在c#中没有办法强制成员为protected AND internal。
c#和VB。. NET使用联合而不是交集来组合访问修饰符。
如果你一定要这样做,有一个变通的办法。虽然不干净,但很有效。您可以创建带有内部属性的helper类,然后将该内部类类型的受保护属性添加到您的类中。受保护属性的内部属性只能在所属程序集中的子类上访问。
的例子。我使用泛型是因为您可能需要多个不同类型的受保护内部属性。泛型将允许您使用一个内部类,而不管所需的属性类型。
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;
}
}
protected AND internal在c#(或任何其他高级。net语言)中不可用。虽然它被CLR支持并且可以在IL中实现。
引用自Equiso的链接:
顺便说一句,CLR确实有ProtectedANDInternal的概念,但是c#没有语法来指定它。如果你看一下CLR的system . reflection . methodatattributes枚举,你会看到FamANDAssem和FamORAssem("Family"是CLR对c#的protected的术语,"Assem"是c#的internal的术语)。
在c#中不能定义protected和internal成员,尽管CLR (MemberAttributes.FamilyAndAssembly
)支持
内部类和受保护成员呢?