c#中私有和公共访问修饰符的区别
本文关键字:区别 访问 | 更新日期: 2023-09-27 18:04:22
我明白如果我要使用私有访问修饰符,例如:
namepsace MyNameSpace
{
class Book
{
private string title;
}
}
那么这意味着实例变量title只能在类中访问,即上面例子中的Book类。
然而,如果我要使实例变量为公共,我已经读到这使得它可以被类外部访问。我的问题是,这是否也意味着它可以在名称空间之外访问?还是我们仍然在讨论名称空间中的类?我找不到任何能回答我这个问题的资源,所以我想在这里问一下。
名称空间纯粹用于组织,而不是用于可访问性。. net中没有基于名称空间允许/限制对资源的访问的可访问性机制。由于名称空间可以分布在多个程序集中,使成员"对名称空间"私有将不会有效,因为任何人都可以在不同的程序集中编写类,但可以使用相同的名称空间并访问这些成员。
你可以从文档中推断,当讨论可访问性时没有提到命名空间,只有类型和程序集。
一般来说,private
表示"只能由包含定义的东西使用"。对成员来说,这就是类;对于类型,它是定义它的"外部"类型(如果有的话)。你不能有顶级private
类型,因为名称空间不是真正的"容器",所以没有什么可以使它私有到。
关于这个的其他问题:
在c#/.NET中只有命名空间的类可见性?
命名空间中的私有类
如何使基础结构代码只在命名空间中可见?
title
的完整位置为MyNameSpace::Book::title
。Namespaces
不限制其成员的可访问性。Namespace
给它的成员新的位置。class
也是Namespace
的一种类型。
在中国可能有一个号码为123456789
的电话。在新加坡也可能有一个号码相同的电话123456789
。任何人都可以拨打这些号码。但是为了区分这些不同的数字,我们需要Country Code
,有时也需要STD Code
。所以这里,Country Code
和STD Code
就是Namespace
。
使class
的成员public
不会影响Namespace
之外的成员访问。但是,成员访问应该通过类的对象有效。
No。这与名称空间无关。名称空间是一个位置。只要你的类被访问,它的public成员也能被访问。