gpt4 book ai didi

c# - (C# 7.2) "private protected"修饰符的用例是什么?

转载 作者:IT王子 更新时间:2023-10-29 03:44:30 28 4
gpt4 key购买 nike

C# 7.2 introduces the private protected modifier .

我一直保护对具有属性的字段的访问,允许通过 Get/Set 方法进行访问,因为我通常不希望我的对象的内部状态被我自己的类以外的任何东西修改。

我想了解为什么 C# 语言团队要添加此功能。在谷歌上进行广泛搜索、阅读和观看“最新消息”媒体(我看过 press releasedetailsvideo by Mads Torgerson)后,我仍然一无所知。

对我来说,这似乎允许开发人员打破 Liskov 替换原则,但这可能是因为我不明白为什么现在存在此功能。

我知道它是如何使用的,只是不知道为什么 - 请有人提供一个真实世界的使用示例而不是 MSDN 文档中人为的使用示例吗?

最佳答案

在 C# 7.2 之前,我们有 protected internal 修饰符。这实际上意味着 protected OR internal,即 - 子类以及当前程序集中的任何类都可以访问成员 A,即使该类不是 A 类的子类>(因此放宽了“ protected ”所暗示的限制)。

private protected 的真正意思是 protected 和内部。也就是说 - 成员只能被同一程序集中的子类访问,但不能被程序集外部的子类访问(因此“ protected ”隐含的限制被缩小 - 变得更加严格)。如果您在程序集中构建类的层次结构并且不希望其他程序集中的任何子类访问该层次结构的某些部分,这将非常有用。

我们可以举个例子Jon Skeet提供in comments .假设你有课

public class MyClass {

}

并且您希望只能在当前程序集中继承它,但不希望允许直接实例化此类,除非是在此类层次结构中。

仅在当前程序集中继承可以使用内部构造函数实现

public class MyClass {
internal MyClass() {
}
}

防止直接实例化,除非当前类层次结构可以使用 protected 构造函数来实现:

public class MyClass {
protected MyClass() {
}
}

要获得两者 - 您需要 private protected 构造函数:

public class MyClass {
private protected MyClass() {
}
}

关于c# - (C# 7.2) "private protected"修饰符的用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47430491/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com