我问了很多人这个问题,直到现在我还没有答案。
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)
如何使用(public,private,protected,internal)要有这样的行为:
示例:
我不喜欢的解决方案:
将约翰的秘密设置为受保护的,并继承一个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个秘密,我会有一个巨大的文件,我不能将代码拆分到不同的源代码文件中。
有人能给出一个好的解决方案吗?
我很感谢:)
非常感谢。
发布于 2009-08-24 20:48:20
您应该采用您提出的第二个解决方案。对于您拥有的可见性需求,它最适合于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
{
}
}
发布于 2009-08-24 20:52:03
C#具有以下访问权限。
public
-每个人都可以看到itprivate
-只有类中的内容才能看到itprotected
-只有类中的内容才能看到itinternal
,或者派生类中的内容可以看到itinternal
-只有程序集内的内容(dll或exe)才能看到itprotected internal
-只有类或派生类中的内容才能看到它,而且只有当它们位于同一个程序集中时才能看到您只有两个选项:
internal
,并将您的代码拆分为两个程序集-一个用于John,另一个用于pou.private
,并将所有JohnSecret类嵌套在外部John类中。paracycle's tip of using partial classes让这一切变得相当美好。注意:若要创建多个程序集,必须在visual studio中创建多个项目。
从实用的角度来看,如果目录像那样彼此隔开,这真的很重要吗?使用访问修饰符没有任何安全好处,因为任何人都可以使用反射来轻松地调用您的私有/内部方法。
它给您的主要好处是在编码时避免杂乱,但您已经将它们放在不同的名称空间中,这应该有助于处理杂乱。
https://stackoverflow.com/questions/1324629
复制相似问题