
[英]In C#, what is the difference between public, private, protected, and having no access modifier?
[英]Difference between private and public access modifier in C#?
我了解如果要使用私有访问修饰符,例如:
namepsace MyNameSpace
{
class Book
{
private string title;
}
}
然后,这意味着实例变量标题仅可从上述示例中的类(即Book类)内部访问。
但是,如果我要使实例变量成为public ,则我已经读到这使得类外部可以访问它。
我的问题是,这是否也意味着它可以在名称空间之外访问? 还是我们还在谈论命名空间中的类? 我找不到任何资源可以回答我的这个问题,因此想在这里提出。
命名空间仅用于组织,而不用于可访问性。 .NET中没有可访问性机制,该机制允许/限制基于名称空间的资源访问。 由于命名空间可以分布在多个程序集中,因此将成员私有化为“命名空间”将是无效的,因为任何人都可以在不同的程序集中编写一个类,但使用相同的命名空间并访问那些成员。
您可以从文档中推断出这一点, 该文档在讨论可访问性时仅提及类型和程序集,而没有提及名称空间。
通常, private
表示“只能由包含定义的事物使用”。 对于成员来说,那是课程; 对于类型,定义它的是“外部”类型(如果有的话)。 你不能有一个顶级private
类型,因为命名空间是不是真正的“集装箱”,所以没有什么让它私有 。
解决此问题的其他问题:
title
完整位置是MyNameSpace::Book::title
。 Namespaces
不限制其成员的可访问性。 Namespace
为其成员提供新的位置。 class
也是Namespace
。
例如:
在中国,可能会有电话号码123456789
。 同样在新加坡,可能会有电话号码为123456789
的电话。 任何人都可以拨打这些号码。 但是要区分这些不同的数字,我们需要Country Code
,有时还需要STD Code
。 因此,此处的Country Code
和STD Code
为Namespace
。
将class
的成员class
public
不会影响其在Namespace
之外的可访问性。 但是,成员访问应该通过类的对象有效。
不,这与名称空间无关。 命名空间是一个位置。 只要您的班级可以访问,它的公共成员也将可以被访问。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.