C# 内部访问说明符,
C# internal Access Specifiers,
我已经创建了一个 ConsoleApplication 来理解访问说明符。
下面是我的 内部代码 ,我可以从 Assembly 外部访问这个 class。
namespace Assembly_1 //This is first assembly.
{
public class Base
{
//internal class
internal class B
{
public static void fnB()
{
Console.WriteLine("fnB");
}
}
}
}
namespace Assembly_2 //This is second assembly.
{
public class Derived : Assembly_1.Base
{
public class D
{
public void fnD()
{
B.fnB();//how can I access this class?
}
}
}
}
这就是我访问它的地方。
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Assembly_2.Derived.D d = new Assembly_2.Derived.D();
d.fnD();
}
}
}
我的问题
现在我可以访问 Class B 并且它的方法类似于 Derived 中的 fnB()。
一切正常。但是如何?
如何在Assembly_1之外访问B Class?
How can I access the B Class outside Assembly_1?
因为您混淆了名称空间和程序集。程序集是一个或多个命名空间的集合,包含在 .dll 或 .exe 文件中。
另请参阅:MSDN: Assemblies in the Common Language Runtime and Understanding and Using Assemblies and Namespaces in .NET。
你所说的 Assembly_1
和 Assembly_2
是同一个 assembly.
中的 namespaces ]
因为 internal
成员在同一程序集中可见,您可以使用 Assembly_2.D
中的 Assembly_1.B
,因为两个命名空间都位于同一程序集中。
正如我在评论中所写:
您混淆了 namespace
和 assembly
术语。
您可以在这里阅读:(Assemblies and Namespace)
可以在单个 assembly
.
中定义许多命名空间
如果您想查看和了解 internal
修饰符,
那么你必须创建一个新的 class 库项目(它将编译成不同的程序集),在那里定义 Base
class
并在您的主控制台应用程序中添加对它的引用。
然后你会看到你无法再访问它并且代码将无法编译。
我已经创建了一个 ConsoleApplication 来理解访问说明符。
下面是我的 内部代码 ,我可以从 Assembly 外部访问这个 class。
namespace Assembly_1 //This is first assembly.
{
public class Base
{
//internal class
internal class B
{
public static void fnB()
{
Console.WriteLine("fnB");
}
}
}
}
namespace Assembly_2 //This is second assembly.
{
public class Derived : Assembly_1.Base
{
public class D
{
public void fnD()
{
B.fnB();//how can I access this class?
}
}
}
}
这就是我访问它的地方。
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Assembly_2.Derived.D d = new Assembly_2.Derived.D();
d.fnD();
}
}
}
我的问题
现在我可以访问 Class B 并且它的方法类似于 Derived 中的 fnB()。
一切正常。但是如何?
如何在Assembly_1之外访问B Class?
How can I access the B Class outside Assembly_1?
因为您混淆了名称空间和程序集。程序集是一个或多个命名空间的集合,包含在 .dll 或 .exe 文件中。
另请参阅:MSDN: Assemblies in the Common Language Runtime and Understanding and Using Assemblies and Namespaces in .NET。
你所说的 Assembly_1
和 Assembly_2
是同一个 assembly.
因为 internal
成员在同一程序集中可见,您可以使用 Assembly_2.D
中的 Assembly_1.B
,因为两个命名空间都位于同一程序集中。
正如我在评论中所写:
您混淆了 namespace
和 assembly
术语。
您可以在这里阅读:(Assemblies and Namespace)
可以在单个 assembly
.
如果您想查看和了解 internal
修饰符,
那么你必须创建一个新的 class 库项目(它将编译成不同的程序集),在那里定义 Base
class
并在您的主控制台应用程序中添加对它的引用。
然后你会看到你无法再访问它并且代码将无法编译。