栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

除了这样,为什么我不能访问受C#保护的成员?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

除了这样,为什么我不能访问受C#保护的成员?

“保护”关键字意味着只有一种类型和从该类型派生的类型可以访问成员。D与C没有关系,因此无法访问该成员。

如果您希望能够访问该成员,则有两种选择

  • 公开
  • 使其内部。这将允许任何类型访问同一程序集中的成员(或其他程序集(如果您添加朋友的话))
  • 从C派生D

编辑

这种情况在C#规范的3.5.3节中提到。

不允许这样做的原因是因为它将允许跨层次调用。想象一下,除了D之外,还有C的另一个基类E,如果您的代码可以编译,它将允许D访问成员EF。这种情况在C#中是不允许的(而且我
相信 CLR,但是我不这样做) t 100%知道)。

EDIT2 为什么这很糟糕

请注意,这是我的意见

现在允许这样做的原因是,这使得很难对类的行为进行推理。访问修饰符的目的是使开发人员完全控制谁可以访问特定方法。想象以下课程

sealed class MyClass : C {  override F(D d) { ... } }

考虑一下如果F是一个时间紧迫的函数会发生什么。通过当前行为,我可以推断出我班级的正确性。毕竟只有两种情况会调用MyClass.F。

  1. 在C中调用它的位置
  2. 我在MyClass中显式调用它的地方

我可以检查这些调用并就MyClass的功能得出合理的结论。

现在,如果C#确实允许跨层次结构保护的访问,则我无法做出任何保证。完全不同的程序集中的任何人都可以从C派生而来。然后他们可以随意调用MyClass.F。这使得完全不可能推理出我班级的正确性。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/368248.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号