如果我们在任何命名空间下创建私有类,那么我们就会遇到编译错误,但是如果我们在另一个类中创建私有类作为嵌套类,那么编译就可以了。另一个人解释了为什么我们在任何名称空间下声明私有都会出错?他说:
允许类对命名空间保密是不会的 有意义的保护水平。世界上任何集会都可以简单 引用你的dll,并开始在你的命名空间中编写代码 访问你所谓的私人课程。我想这可能是 回答你从微软获得的。
我真的不明白这句话"start writing code in your namespace which accesses your supposedly private classes"
任何人如何访问我的私人课程?任何人都可以告诉我"start writing code in your namespace which accesses your supposedly private classes"
答案 0 :(得分:2)
假设您在其中编写了一个DLL:
// hypotetical code !
namespace My.Namespace
{
private class MyClass
{
}
}
通过这个你想要来声明这个类只能用于命名空间My.Namespace
。您希望将此类设置为该命名空间的内部,并在外部使用表单时保护它。
现在任何人都可以创建一个不同的DLL引用上面的DLL并声明相同的命名空间My.Namespace
,并且实际上能够使用MyClass
。因为它在同一名称空间中:
// hypotetical code !
namespace My.Namespace
{
public class AnotherClass
{
private hisClass = new MyClass();
}
}
在这种情况下私有修饰符有什么用处?
答案 1 :(得分:0)
想象一下以下场景:
您使用命名空间A.dll
编写程序集Mou.MyStuff
。在该命名空间中,有一个私有类SomeClass
。根据{{1}}知名度,该课程应该向谁显示?仅限于同一命名空间中的其他类型?
然后,其他人可以编写他或她自己的集会private
。在该程序集中,他们可以在命名空间B.dll
中定义类SomeOtherClass
。没有什么能阻止他们使用非常相同的命名空间,因此访问“私有”类型绝对没有障碍。
如果您要查找的只是装配中的可见度,请使用internal
可见性。