【问题标题】:Simple C# Question: Nesting Classes, Accessibility简单的 C# 问题:嵌套类、可访问性
【发布时间】:2009-08-07 23:32:20
【问题描述】:

我知道这可能很简单,但我似乎无法弄清楚是否可以这样做。

我有以下代码:

public class A {    
thisMethod();  

 public class B {    
  someMethod();    
   }   
}


public class C {    
A myA = new A();    
A.B.someMethod();    
}

如果我已经实例化了 A,为什么我不能访问 B?

提前感谢您的帮助!

【问题讨论】:

    标签: c# class nested


    【解决方案1】:

    你需要一个 A.B 的实例来调用 A.B 的实例方法:

    A.B foo = new A.B();
    foo.SomeMethod();
    

    在您的示例中,您甚至没有尝试使用您创建的新实例。

    如果您有 Java 背景,可能值得指出的是,C# 中的嵌套类类似于 Java 中的 static 嵌套类。从嵌套类的实例到容器类的实例没有隐式引用。 (访问也是反过来的——在 Java 中,外部类可以访问其嵌套类的私有成员;在 C# 中,嵌套类可以访问其外部类的私有成员。)

    【讨论】:

    • 我想我这样做的原因只是为了逻辑分组。所以我有 Player.Controls 和 Player.Library 而不是一个巨大的类中的所有方法。
    • 但是为什么要嵌套它们呢?为什么不从完全独立的类开始,就在“播放器”命名空间中?
    【解决方案2】:

    您正试图访问它,就像它是一个静态方法或一个名为“B”的类 A 的属性。你仍然需要创建它的一个实例——它是一个类声明。我想你正在寻找:

    public class A {    
    
    public A()
    {
       myB = new B();
    }
    
    thisMethod();  
    public B myB
    {
     get; set;
    }
    
     public class B {    
      someMethod();    
       }   
    }
    
    
    public class C {    
    A myA = new A();    
    A.myB.someMethod();    
    }
    

    请注意,不建议公开嵌套类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多