C#2.0新特性 - 友元程序集(Friend Assemblies)

  你的程序集A里有一些类型。你有某一个程序集B。你很想让程序集B看到这些类型(A中的类型)。但是却不想让所有人都看到。你该怎么办?

v1.0v1.1里,你可以把这些类型标记为public,然后用StrongNameIdentityPermission来修饰。

Whidbey+里,你可以说程序集B是程序集A友元。(原文链接有问题,应为http://msdn2.microsoft.com/library/0tke9fxk.aspx

注意页面中的例子不正确,正确的语法应为:

[assembly:InternalsVisibleTo ("AssemblyB, PublicKeyToken=32ab4ba45e 0a 69a 1")]

InternalsVisibleToAttribute的构造器中的字符串是友元程序集的名字。

当你声明程序集B是程序集A的友元,程序集B就能访问A的非公有类型。

StrongNameIdentityPermission跟友元程序集有什么不同呢?

1. StrongNameIdentityPermission应用于单独的类型,而友元程序集应用于整个程序集。

如果你想把程序集A里成百上千个类型与B共享,你就必须把所有这些类型都用StrongNameIdentityPermission修饰。而使用友元程序集,你只要声明一次就行了。

2.更重要的是,使用StrongNameIdentityPermission,你想共享的类型必须被声明为public。而使用友元程序集,这些类型可以是(必须是)非公有的。

3.一个类型只能有一个StrongNameIdentityPermission,但是你可以声明任意多的程序集作为你的友元。

友元程序集中的友元关系是单向的。当程序集A说程序集B是它的友元,并不意味着程序集A是程序集B的友元。你必须在程序集B里显式地声明友元关系。

友元关系不是可传递的。如果程序集C是程序集B的友元,程序及B是程序集A的友元,程序集C并不会自动成为程序集A的友元。

如你所知,这只是根据预览版写的材料,以后有可能发生变化。


注:1.原文为Junfeng Zhang's blog里的一篇post

       2. Reviewed by Ninputer, 损失了你的午觉,不好意思 :)

你可能感兴趣的:(sem)