Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么VSIDE在创建私有类时出错_C#_Oop - Fatal编程技术网

C# 为什么VSIDE在创建私有类时出错

C# 为什么VSIDE在创建私有类时出错,c#,oop,C#,Oop,若我们在任何名称空间下创建私有类,那个么我们会得到编译错误,但若我们在另一个类中创建一个嵌套类的私有类,那个么它可以编译。另一个人解释了为什么在任何名称空间下声明private都会出错?他说, 允许类对名称空间是私有的不会产生任何效果 有意义的保护级别。世界上的任何大会都可以 引用dll,并开始在名称空间中编写代码 访问你所谓的私有类。我想这可能是 你会从微软得到答案 我真的不明白这句话“开始在名称空间中编写代码,它可以访问假定的私有类” 任何人怎么能进入我的私人课堂?任何人都可以告诉我这句话:

若我们在任何名称空间下创建私有类,那个么我们会得到编译错误,但若我们在另一个类中创建一个嵌套类的私有类,那个么它可以编译。另一个人解释了为什么在任何名称空间下声明private都会出错?他说,

允许类对名称空间是私有的不会产生任何效果 有意义的保护级别。世界上的任何大会都可以 引用dll,并开始在名称空间中编写代码 访问你所谓的私有类。我想这可能是 你会从微软得到答案

我真的不明白这句话“开始在名称空间中编写代码,它可以访问假定的私有类”


任何人怎么能进入我的私人课堂?任何人都可以告诉我这句话:“开始在名称空间中编写代码,以访问假定的私有类”

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

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

想象以下场景:

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

然后,其他人可以编写自己的程序集
B.dll
。在该程序集中,他们可以在名称空间
Mou.MyStuff
中定义一个类
SomeOtherClass
。没有任何东西可以阻止他们使用与您使用的非常相同的命名空间,因此访问“private”类型绝对没有障碍


如果您要查找的只是程序集中的可见性,请使用可见性。

世界上的任何程序集都可以引用您的dll,并开始在命名空间中编写代码,以访问假定的私有类,啊..我认为恰恰相反。我想你需要的可能是
内部
类,而不是真正的
私有
类如何创建我的私有类的实例,比如private hiclass=new MyClass()??你能详细解释一下吗。谢天谢地是不可能的!这个例子只是为了解释为什么不可能。首先,c#不允许我们声明私有类。我们只能将私有类声明为另一个类中的嵌套类。所以现在,同一名称空间中的另一个人不能使用我的私有类……我说得对吗?是的,嵌套的私有类只能在父类中使用。您得到了正确的答案,但值得强调的是,这是“假设代码”,不会在另一个类中出现错误。考虑改变上次的评论。首先,C不允许我们声明一个私有类。我们只能将私有类声明为另一个类中的嵌套类。所以现在,同一名称空间中的另一个人不能使用我的私有类……我说得对吗?@Mou人们试图解释规则,说“想象这不是规则,这是会发生的。这很糟糕,所以这就是为什么它是规则”而你一直回答“但这永远不会发生,因为这是规则!”这并不能帮助你理解他们的观点