C# 好友程序集如何限制访问级别?

C# 好友程序集如何限制访问级别?,c#,.net-assembly,friend,C#,.net Assembly,Friend,当使用[assembly:InternalsVisibleTo(“MyFriend”)]将程序集声明为friend时,我必须使用另一个程序集的名称MyFriend来访问内部类/方法 现在我很困惑。这比将方法声明为public的访问权限低多少?因为我只需命名任何程序集MyFriend即可访问 我做错了什么?如果对程序集使用强名称,则还需要为允许访问内部的程序集提供公钥。 这在你的情况下要好得多,因为它不仅仅依赖于名字。 见: 但是,人们仍然可以使用反射来访问受限制的内容。因为只有名为“MyFrie

当使用
[assembly:InternalsVisibleTo(“MyFriend”)]
将程序集声明为friend时,我必须使用另一个程序集的名称
MyFriend
来访问
内部
类/方法

现在我很困惑。这比将方法声明为
public
的访问权限低多少?因为我只需命名任何程序集
MyFriend
即可访问


我做错了什么?

如果对程序集使用强名称,则还需要为允许访问内部的程序集提供公钥。 这在你的情况下要好得多,因为它不仅仅依赖于名字。 见:


但是,人们仍然可以使用反射来访问受限制的内容。

因为只有名为“MyFriend”的程序集可以访问,而没有任何具有任何名称的程序集。如果你想在框架上捣乱,有很多方法可以访问内部Memeber。您可以使用反射、动力学写出IL。“内部可视性”是指一般用途。@RobertHarvey好的,没错。但是这种机制并没有提供强大的限制,因为每个人都可以通过这种方式命名他/她的程序集来获得访问权限?那么,声明好友程序集有什么意义呢?@John您可以在InternalsVisibleTo中包含公钥签名,这就解决了这个问题-但是:这不是一个安全功能。大多数应用程序在完全信任的情况下运行,因此任何人都可以访问私有状态(通过反射等)。