据我所知,如果我使用私人访问修饰符,例如:
namepsace MyNameSpace
{
class Book
{
private string title;
}
}
然后这意味着实例变量 title 只能从类中访问,即上例中的 Book 类。
但是,如果我要将实例变量 public ,我已经读过这使得它可以在类外部访问。
我的问题是,这是否意味着它可以在命名空间之外访问?或者我们还在讨论命名空间中的类吗?我找不到任何回答我这个问题的资源,因此想在这里问。
答案 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::title
。 Namespaces
不限制其成员的可访问性。 Namespace
为其成员提供新的位置。 class
也是一种Namespace
。
例如:
在中国,可能会有号码为123456789
的电话。同样在新加坡,可能会有一个号码相同的电话123456789
。任何人都可以拨打这些号码。但要区分这些不同的数字,我们还需要Country Code
,有时也需要STD Code
。因此,Country Code
和STD Code
为Namespace
。
成为class
public
的成员不会影响其Namespace
以外的访问权限。但是,成员访问应该通过类的对象有效。
答案 2 :(得分:0)
没有。它与命名空间无关。命名空间是一个位置。只要您的课程被访问,它的'公共成员也可以访问。