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

本文关键字:错误 IDE VS 创建 为什么 | 更新日期: 2023-09-27 18:04:56

如果我们在任何命名空间下创建私有类,那么我们得到编译错误,但如果我们在另一个类中创建私有类作为嵌套类,那么它编译良好。另一个人解释了为什么在任何命名空间下声明私有时会出现错误?他说:

允许类对命名空间是私有的将实现no有意义的保护水平。世界上任何一个集会都可以引用您的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"

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

假设你有一个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();
    }
}

在这种情况下,私有修饰符有什么用?

想象以下场景:

你写了一个程序集A.dll和一个命名空间Mou.MyStuff。在这个命名空间中,有一个私有类SomeClass。基于private的可见性,该类应该对谁可见?只对同一名称空间中的其他类型?

然后,其他人可以编写自己的程序集B.dll。在该程序集中,他们可以在命名空间Mou.MyStuff 中定义类SomeOtherClass 。没有什么可以阻止他们使用与您相同的命名空间,因此访问您的"私有"类型绝对没有障碍。

如果您正在寻找的是仅在您的程序集中可见性,请使用internal可见性。