为什么VS IDE在创建私有类时会出错

时间:2013-03-20 12:14:12

标签: c# oop

如果我们在任何命名空间下创建私有类,那么我们就会遇到编译错误,但是如果我们在另一个类中创建私有类作为嵌套类,那么编译就可以了。另一个人解释了为什么我们在任何名称空间下声明私有都会出错?他说:

  

允许类对命名空间保密是不会的   有意义的保护水平。世界上任何集会都可以简单   引用你的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"

2 个答案:

答案 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可见性。