访问修饰符与什么是程序集
类的可访问属性有public,private,protect,innertal,protect internal.其中internal只有在同一程序集的文件中,内部类型或成员才是可访问。下面就用这个来继续程序集的事例。
1 namespace AssemblyLibrary 2 { 3 internal class InternalClass 4 { 5 public int ID { get; set; } 6 } 7 public class PulClass 8 { 9 public int ID { get; set; } 10 public InternalClass Inter { get; set; } 11 } 12 }
你们说这个编译能通过吗?很明显,如果基础好点同学,不用编译器就可以看出,这个是有语法错误的。作为类的属性来说,属性的访问性不能高于类型的访问性。
找了msdn发现http://msdn.microsoft.com/zh-cn/library/k3677y81(v=vs.100) 这里是这样说的:
程序集构成了基于 .NET 的应用程序的部署、版本控制、重用、激活范围和安全权限的基本单元。程序集以可执行 (.exe) 文件或动态链接库 (.dll) 文件的形式出现,是 .NET Framework 的生成块。它们向公共语言运行库提供了解类型实现所需要的信息。可以将程序集看成是构成逻辑功能单元并为一起工作而生成的类型和资源的集合。
程序集可以分为,公有程序集和私有程序集。微软给我们用framework的提供的System之类的就是公有程序集,私有程序集可以说是我们新建的类库吧。 为什么会有这个区分,因为一般来说一个程序集只能被一个进程域加载,如果要多个进程域加载同一个程序集,那么只有把程序集变成公有程序集。我们写的dll也是可以加入公有程序集的(但是必须是有强名)。很简单的,自己baidu下就可以找到。有一个很简单的区分是不是公有程序集的方法,如果你引用这个dll。这个dll没有被复制到bin目录,那他就是公有程序集(微软提供和自己加入公有程序集)http://space.189works.com/space-uid-10034751.html 详细!
下面重点收录C#访问修饰符及各种元素的访问修饰符的默认值
能在命名空间中定义的元素有:类(class),结构(struct),委托(delegate),接口(interface),枚举(enum)
MSDN提示: protected internal 可访问性的意思是受保护“或”内部,而不是受保护“和”内部。
我们的访问修饰符一共有5个级别
public, private, protected, internal, protected internal
命名空间下的元素的默认访问修饰符(能在命名空间中定义的元素有:类(class),结构(struct),委托(delegate),接口(interface),枚举(enum))
命名空间下只能使用两种访问修饰符public和internal。如果没有显式的给这些元素访问修饰符,其修饰符默认为internal 。
public : 同一程序集的其他任何代码或引用该程序集的其他程序集都可以访问该类型或成员。
internal : 同一程序集中的任何代码都可以访问该类型或成员,但其他程序集不可以访问。
各类型中的成员的默认访问修饰符
剩下的修饰符主要是针对继承这个语言特性,拥有继承的类型有两个——类(class)和接口(interface)。public,internal同样可以用于类型成员。
private : 同一类和结构的代码可以访问该类型和成员。
protected : 同一类和派生(继承特性)类中的代码可以访问该类型和成员。
protected internal : 同一程序集中的任何代码或其他程序集中的任何派生类都可以访问该类型或成员。
MSDN提示 :
1.) 派生类的可访问性不能高于其基类型。换句话说,不能有从内部类 A 派生的公共类 B。如果允许这种情况,将会使 A 成为公共类,因为 A 的所有受保护的成员或内部成员都可以从派生类访问。
2.) 成员的可访问性决不能高于其包含类型的可访问性。
3.) 可以使用五种访问类型中的任何一种来声明类成员(包括嵌套的类和结构)。
接口(interface)
接口成员访问修饰符默认为public,且不能显示使用访问修饰符。
类(class)
构造函数默认为private访问修饰符。
析构函数不能显示使用访问修饰符且默认为private访问修饰符。
类的成员默认访问修饰符为private;
枚举(enum)
枚举类型成员默认为public访问修饰符,且不能显示使用修饰符。
结构(struct)
结构成员默认为private修饰符。
结构成员无法声明为protected成员,因为结构不支持继承。
嵌套类型
嵌套类型的默认访问修饰符为private。 和类,结构的成员默认访问类型一致。