【问题标题】:Difference between private and public access modifier in C#?C#中私有和公共访问修饰符之间的区别?
【发布时间】:2017-01-03 02:23:53
【问题描述】:

我了解如果我要使用 private 访问修饰符,例如:

namepsace MyNameSpace
{
  class Book
  {
   private string title;
  }
}

那么这意味着实例变量 title 只能从类中访问,即上面示例中的 Book 类。

但是,如果我要使实例变量 public,我已经读到这使得它可以在类外部访问。

我的问题是,这是否也意味着它可以在命名空间之外访问?还是我们还在谈论命名空间中的类?我找不到任何资源可以回答我的这个问题,因此想在这里提问。

【问题讨论】:

  • 用您使用的语言标记它,让相关人员查看它。
  • Access Modifiers 参考资料似乎可以解释您想知道的内容。当您对语言/框架有疑问时,请务必查看文档。

标签: c# access-modifiers


【解决方案1】:

命名空间纯粹是为了组织,而不是为了可访问性。 .NET 中没有允许/限制基于命名空间访问资源的可访问性机制。由于命名空间可以分布在多个程序集中,因此将成员设为“对命名空间而言”私有不会有效,因为任何人都可以在不同的程序集中编写一个类,但使用相同的命名空间并访问这些成员。

您可以从 the documentation 推断出这一点,它在讨论可访问性时没有提及命名空间,仅提及类型和程序集。

一般来说,private 的意思是“只能被包含定义的东西使用”。对于成员来说,这就是类;对于类型,它是定义它的“外部”类型,如果有的话。您不能拥有顶级 private 类型,因为命名空间并不是真正的“容器”,因此没有什么可以将其设为私有

解决此问题的其他问题:

Namespace only class visibility in C#/.NET?

private classes inside namespaces

How do you make infrastructure code only visible in namespace?

【讨论】:

    【解决方案2】:

    title 的完整位置是MyNameSpace::Book::titleNamespaces 不限制其成员的可访问性。 Namespace 为其成员提供新位置。 class 也是Namespace 的一种。

    例如:

    在中国可能有电话号码为123456789。同样在新加坡也可能有一个相同号码的电话123456789。任何人都可以拨打这些号码。但是为了区分这些不同的数字,我们需要Country Code,有时还需要STD Code。所以在这里,Country CodeSTD CodeNamespace

    成为class public 的成员不会影响它在Namespace 之外的访问。但是,成员访问应该通过类的对象有效。

    【讨论】:

    • 我认为这个例子并没有让它更清楚。
    【解决方案3】:

    没有。这与命名空间无关。命名空间是一个位置。只要你的类被访问,它的公共成员也能被访问。

    【讨论】:

      猜你喜欢
      • 2011-01-31
      • 2017-08-11
      • 2015-11-26
      • 2010-12-03
      • 2020-02-21
      • 2011-09-18
      • 2014-08-27
      • 1970-01-01
      • 2013-07-24
      相关资源
      最近更新 更多