命名空间内的私有类
可能重复:
命名空间只有C#/ .NET中的类可见性?
我想要的是拥有一个只能在同一命名空间内的其他类访问的类,而不必将命名空间放在它自己的程序集中。
有没有理由在C#中这是不可能的?
编辑 :我已经改变了一点问题,因为编译器告诉我不允许private
。 谁能告诉我这个的原因?
除了gehho的答案:命名空间只是类型名称的一部分(它只允许所有类型具有唯一的名称) – 这就是为什么你不能限制对命名空间内的类型的访问。
这是不可能的。
您只能使用internal
修饰符限制对包含该类的程序集的访问。
您还可以通过使类成为嵌套类来将对类的访问限制为单个类。 例如,如果您将类B作为A类中的私有嵌套类,则B只能由A访问。
我认为这两个选项是你能做的最好的选择。 如果您确实要限制对命名空间的访问,则必须将其放在单独的程序集中。
编辑:第二个问题:为什么不允许私人课程。 仅当私有类嵌套在另一个类中时才允许使用私有类。 如果您将非嵌套类设为私有,它的用途是什么? 无论如何你都无法访问它,所以你无法用它做任何事情。
您可以使用internal
类限制对当前程序集的可见性。
但是,您可以允许其他程序集使用InternalsVisibleTo属性来查看程序集。
例
在程序集AssemblyOne中定义MyInternalClass:
[assembly: InternalsVisibleTo("AssemblyTwo")] internal class MyClass { internal void DoSomeAction() { } }
然后在AssemblyTwo中定义另一个类:
public class MyOtherClass { public void DoAnotherAction() { MyClass c = new MyClass(); c.DoSomeAction(); } }
因为您可以在任何其他外部程序集中向命名空间添加类型。 类型是否在同一名称空间中,但不同的程序集会看到您的“私有类型”?
如果不是,我们很难理解(命名空间中的一种类型可以看到您的类型,另一种类型 – 不 – )。 如果是,我们与“私有”的定义相矛盾,因为不同程序集中的类型可以访问程序集的“私有”细节。
您可以声明任意名称空间,因此您可以将自己的类声明为System名称空间的一部分。 当然,如果Microsoft决定在其命名空间中添加具有相同名称的类,则会导致错误。
为什么要拥有“命名空间可见性”? 这将意味着一种特殊的公共forms,因为任何人都可以将其类声明为所需的命名空间,从而访问您的类。
如果您希望它作为安全function,这将无法正常工作。 如果你想通过隐藏“内部”类来整理你的命名空间,你可以在主命名空间下面有一个Internals命名空间。
上述就是C#学习教程:命名空间内的私有类分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/984596.html