内部类可以在其他命名空间中访问吗?

5 .net c# assemblies namespaces

我目前正在网上阅读这本书: http://www.angelfire.com/theforce/chewy0/csharp/Thinking_in_C-Sharp_.pdf

在第 23 页(PDF 文档的第 38 页)上,它指出内部类不能从外部命名空间内的类访问。

但是,在在线 Microsoft 文档中,它指出内部类只能从同一程序集访问。

https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/internal

根据我的理解,程序集可以包含来自多个命名空间的类。根据 Microsoft 文档,这是否意味着可以跨不同的命名空间访问内部类?

或者说内部类在其受尊重的程序集命名空间中都是私有的,这是真的吗?

Joh*_* Wu 3

所以这是摘录,对吗?

\n\n
\n

Java 使用五个显式关键字来设置类的边界:public、\n private、protected、internal 和 protected inside。它们的用法和含义非常简单。这些访问说明符决定谁可以使用下面的定义。公共意味着以下定义可供所有人使用。另一方面,private 关键字意味着除了您(该类型的创建者)之外,没有人可以在该类型的成员函数内访问这些定义。私有是你和客户端程序员之间的一堵砖墙。如果有人尝试访问私有成员,\xe2\x80\x99 将收到编译时错误。protected 的行为类似于 private,但继承类可以访问 protected 成员,但不能访问 private 成员。继承将很快被引入。内部通常称为 \xe2\x80\x9cFriendly\xe2\x80\x9d\xe2\x80\x93 该定义可以被同一命名空间中的其他类访问,就像它是公共的一样,但不能被下面的类访问不同的命名空间。命名空间将在 #ref# [原文如此] 章节中深入讨论。protected inside 允许同一命名空间内的类(与internal 一样)或继承类(与protected 一样)进行访问,即使继承类不在同一命名空间内。

\n\n

C#\xe2\x80\x99s 默认访问是内部的,如果您不\xe2\x80\x99t 使用上述说明符之一,该访问将发挥作用

\n
\n\n

作者可能将 Javainternal与 c#混为一谈internal

\n\n

它们略有不同,因为 Java 没有程序集;它有包,将类组织到命名空间中。

\n\n

在 C# 中,命名空间与可访问性修饰符完全没有关系。只有同一程序集中的类才能访问internal类型或成员,除非您使用InternalsVisibleTo属性。命名空间并不重要。

\n