-2

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

允许类对命名空间私有将不会获得有意义的保护级别。世界上的任何程序集都可以简单地引用您的 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"

4

2 回答 2

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();
    }
}

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

于 2013-03-20T12:24:23.007 回答
0

想象以下场景:

您编写一个A.dll带有命名空间的程序集Mou.MyStuff。在该命名空间中,有一个私有类SomeClass。根据其可见性,该类应该对谁private可见?仅适用于同一命名空间中的其他类型?

然后,其他人可以编写他或她自己的程序集B.dllSomeOtherClass 在该程序集中,他们可以在 namespaceMou.MyStuff中定义一个类。没有什么可以阻止他们使用与您相同的名称空间,因此访问您的“私有”类型绝对没有障碍。

如果您正在寻找的只是在您的装配体中的可见性,请使用internal可见性。

于 2013-03-20T13:06:22.537 回答