【问题标题】:Why can I call a private method of another instance of the same type outside of that instance? [duplicate]为什么我可以在该实例之外调用另一个相同类型的实例的私有方法? [复制]
【发布时间】:2012-10-23 03:37:32
【问题描述】:

如果我有 ObjectA,它有一个私有方法 GetPrice() 并且还有一个相同类型的“父”字段,为什么我可以从子实例中调用父实例上的 GetPrice()

例子:

private decimal GetPrice()
{
    ObjectA parent = Parent;

    if(parent != null)
    {
        return parent.GetPrice(); // Why is this OK?
    }

    return 0;
}

【问题讨论】:

  • 因为语言设计者认为它应该这样工作?

标签: c# access-modifiers


【解决方案1】:

访问修饰符与其实现的类/类型相关,而不是与该类的实例相关

【讨论】:

    【解决方案2】:

    因为private 范围仅限于,而不是C# spec 中定义的实例

    1.6.2 辅助功能 类的每个成员都有一个关联的可访问性,它控制 能够访问该成员的程序文本区域。那里 是五种可能的可访问性形式。这些总结在 下表。

    可访问性含义 公共访问不受限制 protected 访问仅限于此类或从此类派生的类 仅限此程序的内部访问 受保护的内部访问仅限于该程序或从该类派生的类 私人访问仅限于此类

    【讨论】:

      【解决方案3】:

      因为私有意味着“其他类型无法访问”,而不是“其他实例无法访问”。

      【讨论】:

      • 谢谢...在我编写 C# 的 5 年中,我从未注意到这一点。我想从我学习 C# 的访问修饰符的那一刻起,我就误以为它是实例私有的。现在我觉得自己像个傻瓜。每天都学点东西!
      • @Ryan,我知道你的意思......我想这是你可以“误解”很长时间的事情之一。基本上它的行为就像你想的那样,直到你真正尝试访问另一个实例的私有成员并意识到它是允许的:)
      • 这让我很吃惊。有没有文献描述为什么会这样?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 2011-11-11
      • 2014-03-20
      相关资源
      最近更新 更多