C#中私有和公共访问修饰符之间的区别?

时间:2016-08-26 12:02:04

标签: c# access-modifiers

据我所知,如果我使用私人访问修饰符,例如:

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

然后这意味着实例变量 title 只能从类中访问,即上例中的 Book 类。

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

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

3 个答案:

答案 0 :(得分: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?

答案 1 :(得分:0)

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

例如:

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

成为class public的成员不会影响其Namespace以外的访问权限。但是,成员访问应该通过类的对象有效。

答案 2 :(得分:0)

没有。它与命名空间无关。命名空间是一个位置。只要您的课程被访问,它的'公共成员也可以访问。