我向多个人提出这个问题,直到现在我还没有答案。
ASP.NET C#
项目树(文件和文件夹):
> (ROOT)
>
> Class MyAccess (namespace myproject.core)
>
> (Directory John)
------> Class MyJohn (namespace myproject.core.John)
------> Class JohnSecret (namespace myproject.core.John)
------> Class OtherJohnSecret (namespace myproject.core.John)
>
> (Directory Paul)
------> Class MyPaul (namespace myproject.core.Paul)
------> Class PaulSecret (namespace myproject.core.Paul)
我如何使用(公共,私人,受保护,内部)?????有这种行为:
示例:
我不喜欢的解决方案:
让约翰的秘密成为受保护和遗产的MyJohn
示例:
> protected JohnSecret
> internal MyJohn:JohnSecret
糟糕,因为如果我有100个级别的秘密,我需要有类似的东西:
> internal MyJohn:JohnSecret1, JohnSecret2,....,JohnSecret100
在课程中有课程:
> internal class MyJohn {
>
> internal string DoSomething(){}
>
> private class JohnSecret{}
> private class JohnSecret2{}
> private class JohnSecret3{}
>
> }
这不好,因为如果我有100个秘密,我将拥有一个巨大的文件,我无法将该代码拆分为不同的源代码文件。
任何人都可以提供一个好的解决方案吗?
我很感激:)。
非常感谢。
答案 0 :(得分:3)
你应该选择你提出的第二个解决方案。对于您拥有的可见性要求,最适合JohnSecret
,OtherJohnSecret
等。人。在MyJohn
类中定义。
如果您希望将类文件拆分为多个文件,则可以使用partial classes来实现该目标,并仍然保持您的可见性要求。
例如:
> (Directory John)
> File "MyJohn.cs"
public partial class MyJohn
{
}
> File "JohnSecret.cs"
public partial class MyJohn
{
private class JohnSecret
{
}
}
> File "OtherJohnSecret.cs"
public partial class MyJohn
{
private class OtherJohnSecret
{
}
}
答案 1 :(得分:1)
C#具有以下访问权限。
public
- 每个人都可以看到它private
- 只有课堂内的东西才能看到它protected
- 只有类中的内容或派生类内的内容才能看到它internal
- 只有程序集内的内容(dll或exe)可以看到它protected internal
- 只有类或派生类中的内容才能看到它,并且只有它们位于同一个程序集中您只有两个选项:
internal
,并将您的代码拆分为2个程序集 - 一个用于John,一个用于Paul。private
,并将所有JohnSecret类嵌套在外部John类中。 paracycle's tip of using partial classes使这个相当不错。注意:要制作多个程序集,必须在visual studio中创建多个项目。
从务实的角度来看,目录是否像这样被隔离在一起真的很重要吗?使用访问修饰符没有任何安全优势,因为任何人总是可以使用反射来轻松调用您的私有/内部方法。
它给你的主要好处是在编码时保持杂乱,但你已经将它们放在不同的命名空间中,这无论如何都应该有助于混乱。