[英]Access modifiers on properties; why doesn't the following work?
我遇到了一个编译器错误,这对我来说没有任何意义。 我有一个internal
属性,我想限制它的set
块,使其只能通过继承使用。 我认为这可以工作:
internal bool MyProperty {
get { return someValue; }
protected internal set { someValue = value; }
}
但是编译器说,在访问修饰符set
块需要比更严格的internal
-我失去了一些东西,或者是protected internal
不超过限制性internal
?
protected internal
限制较少 ; 它是受保护或内部(未和 ) -因此其另外允许从其他组件的子类进行访问。 您将需要反转:
protected internal bool MyProperty {
get { return someValue; }
internal set { someValue = value; }
}
这将允许您程序集中的代码以及其他程序集中的子类将其获取 (读取)-但只有程序集中的代码才能对其进行设置 (写入)。
从有关C#中的访问修饰符的文档中:
受保护的内部可访问性级别表示受保护的或内部的,而不是受保护的内部。 换句话说,可以从同一程序集中的任何类(包括派生类)访问受保护的内部成员。 为了将可访问性限制为仅允许同一程序集中的派生类,请声明该类本身为内部,然后将其成员声明为受保护。
为了达到理想的效果,您需要交换访问修饰符,如下所示:
protected internal bool MyProperty
{
get { return someValue; }
internal set { someValue = value; }
}
不,这是两者的结合,而不是交集。 因此, protected internal
限制要比单独protected internal
限制少。 交集不是C#的功能; CLR确实支持“ Family AND Assembly”,但是C#仅支持“ Family OR Assembly”。
在这里, protected internal
限制要比internal
限制少。
protected internal
-对当前程序集以及在其他程序集中继承此类型的任何类型都是公共的。
internal
-此程序集为公共,其他程序集为私有
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.