asp.net - C# 类/命名空间访问

标签 asp.net class namespaces

我向很多人问过这个问题,直到现在我都没有答案。

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 、内部)????有这种行为:
  • 类 MyJohn 可以看到并可以从 John 文件夹中的所有类创建对象(所有他的 secret )
  • 类 MyPaul 具有相同的行为,但在 Paul 文件夹中
  • 所有这些 secret 都不能在这个文件夹之外使用。

  • 例子:
  • MyPaul 可以使用他的所有 secret ,并且他可以与类 MyAccess 和 MyJohn 进行通信。
  • MyPaul、MyJohn、MyAccess 将是公开的或内部的
  • MyAccess 不能使用 PaulSecret。


  • 我不喜欢的解决方案:
  • 错误的解决方案 1

  • 让约翰的 secret 成为 protected 遗产,成为 MyJohn

    例子:
    > protected JohnSecret
    > internal MyJohn:JohnSecret
    

    不好,因为如果我有 100 个类(class) secret ,我将需要以下内容:
    > internal MyJohn:JohnSecret1, JohnSecret2,....,JohnSecret100
    
  • 错误的解决方案 2

  • 在类中有类:
    > internal class MyJohn {
    > 
    >        internal string DoSomething(){}
    >        
    >        private class JohnSecret{}
    >        private class JohnSecret2{}
    >        private class JohnSecret3{}
    >
    > }
    

    这不好,因为再一次,如果我有 100 个 secret ,我将拥有一个巨大的文件,我无法将该代码拆分到不同的源代码文件中。

    谁能给出一个好的解决方案?

    我很欣赏:)

    非常感谢。

    最佳答案

    您应该采用您提出的第二种解决方案。对于您的可见性要求,它最适合 JohnSecret , OtherJohnSecret ,等。阿尔。在 MyJohn 中定义类(class)。

    如果您希望将类文件拆分为多个文件,可以使用 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
        {
        }
    }
    

    关于asp.net - C# 类/命名空间访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1324629/

    相关文章:

    asp.net - 帮助理解模拟

    php - PSR- 0 auto 加载测试问题

    c# - 使用 asp.net mvc 使用 stackexchange Api

    c# - 带有 Entity Framework 的动态多数据库上下文

    javascript - 如何在没有ID的情况下标记循环生成的复选框?

    php - print_r 显示私有(private)变量。为什么?

    ios - 无法更改父类/viewcontroller 中的 UIView 属性?

    class - 如何在 typescript 中将一个类用作另一个类的属性的类型?

    actionscript-3 - AS3 内部和自定义命名空间

    c++ - 错误消息 : Pure Abstract Class wrapped in a Namespace in C++