2010-12-15 124 views
16

我想了解C#中的内部访问修饰符。我似乎无法理解程序集到底是什么,程序中的程序部分是什么部分。我试图让这个变量是通俗易懂只能通过物体下面的命名空间中:C#程序集,什么是程序集?

namespace Engine.Entity 

有问题的变量在该命名空间内的类定义的,所以我认为,如果我做了它的内部,只有该名称空间内的对象才有权访问它。我看到程序集和命名空间是一体的,我认为这是不对的。

+2

看看“.Net Reflector”程序。它会让你打开一个程序集,看看里面有什么。您将看到单个程序集可以包含多个名称空间。 – David 2010-12-15 05:50:07

回答

19

命名空间仅影响名称解析。命名空间并不意味着任何类型的存储,名称空间也不会确定哪些DLL包含您的代码。命名空间允许你在逻辑名下将相关的东西组合在一起,尽管它们可能在物理上驻留在不同的DLL中。

程序集基本上只是一个DLL或EXE文件。它包含描述该DLL或EXE中代码的IL代码和类型信息。它也可以包含很多其他的东西,但对于初学者来说,只是把它看作一个DLL。

通过将代码编译到生成DLL或EXE的项目(csproj)中,将代码放入特定程序集。

命名空间可以跨越多个程序集。也就是说,属于该逻辑名称空间成员的类可能驻留在多个DLL中。只有当您的项目引用包含该类的正确程序集(DLL)时,才可以访问源代码中的特定类。

内部修饰符意味着符号只能从相同的程序集中访问。只有与代码编译到同一个DLL中的代码才能访问使用内部标记的属性或方法。

+0

“程序集基本上是DLL或EXE。”没错,但有时它可以是任何类型的文件(jpegs,文本文件等)或同时数个。这是边缘案例(见我对这篇文章的回答)。 – 2010-12-15 14:40:36

+0

是的,组件可以包含/包含一堆东西。与这个问题的级别无关。 – dthorpe 2010-12-15 16:53:00

1

internal (C# Reference)

内部关键字是接入 改性剂的类型和类型成员。 内部类型或成员只能在在同一 装配

文件 访问所以这个来自同一个组件/ DLL,不namespace内表示。

0

基本上,你不能只在给定的命名空间内使变量可见。由于任何人都可以定义任何命名空间,这将使internal无效的想法:你只需要编写

namespace System 
{ 
    public static MySystemInternalSpy 
    { 
     public static void SpyInternals() 
     { 
      ... 
     } 
    } 
} 

来访问在System命名空间定义为internal任何变量,类或方法,例如。

0

命名空间和程序集不是同义词。命名空间通常跨越几个程序集。从Visual Studio构建的任何托管代码都有一对一对应的项目对应程序集到DLL/EXE二进制文件。但是,如果您将托管代码与命令行关联起来,则可以制作一个程序集,其中多个项目文件都属于一个程序集(这意味着磁盘上的多个文件一起代表一个程序集)。但不要介意这种情况,这是一个在实践中从未发生过的深奥的事情。

“内部”访问修饰符仅表示目标只能从该程序集内访问。它对命名空间没有影响。

5

人们很容易被名称空间/程序集的东西所困惑,因为它解耦了代码的物理位置(程序集)的概念以及如何引用它(逻辑上引用是通过使用名称空间,物理引用是通过引用组件)。

我通常用这个词contribute解释:

  1. 的组件可以促进多个命名空间
    例如,System.Data.dll组件对诸如System.Data(例如类别System.Data.DataTable)和Microsoft.SqlServer.Server(例如类别Microsoft.SqlServer.Server.SqlContext)的命名空间有贡献。

  2. 多个程序集可以有助于单个命名空间
    例如,System.Data.dll程序集和System.Xml.dll程序集均对System.Xml名称空间有贡献。
    这意味着如果您使用项目中的System.Xml.XmlDataDocument类,则需要参考System.Data.dll部件。
    如果您使用System.Xml.XmlDocument类,则需要引用项目中的System.Xml.dll

(上面的例子是.NET 4.0,但也可能适用于以前的.NET版本)。

Danny Thorpeexplainednamespaceinternal的概念真的很好,所以我不会详细讨论这些。

- jeroen

+1

+1:像我这样的c#初学者很清楚的解释 – Guillaume07 2012-12-24 07:17:43