内部类如何在c#中工作?

时间:2010-08-12 15:34:45

标签: c#

如果我有一个类:

public class C1
{
    public class SC1 {}
    public class SC2 {}

    public class C1()
    {

    }

}

为什么我不能这样做:

C1 c1 = new C1();

c1.SC1.somePropety = 1234;

5 个答案:

答案 0 :(得分:4)

SC1是一种类型定义。您仍然需要将类型实例化为变量。

编辑: delnan提出另一个观点 - 如果SC1将“someProperty”声明为静态,那么这也可以。

答案 1 :(得分:1)

因为您已经创建了一个Class,而不是该类的属性。

尝试

public class C1
{
  public class SC1 {}
  public class SC2 {}

  public SC1 sc1;

  public C1() {};
}

C1 c1 = new C1();
c1.sc1.SomeProperty = 1234'

答案 2 :(得分:1)

C1C1.SC1C1.SC2是独立的类。对于C1.SC1C1.SC2,外部C1类充当一种奇怪的命名空间。

您仍然需要创建C1.SC1new C1.SC1().someProperty = 1234)的实例才能访问其上的非静态成员。

(但是,内部类具有的一个特性是能够访问外部类实例上的私有成员。内部类和外部类仍然是独立的 - 只是在内部类的范围内,{{1开始表现得像private。)

答案 3 :(得分:1)

答案 4 :(得分:0)

Tutorial on Nested Classes in C#

它应该是这样的:

class Demo
{
    public static void Main()
    {
        System.Console.WriteLine(OuterClass.NestedClass.x);     
    }
}

class OuterClass
{
    public class NestedClass
    {
        public static int x = 100;
    }
}
  

不需要实例类   访问静态变量。规则   适用于中的独立类   静态变量的情况也适用于   嵌套类。对于嵌套类,   嵌套的完全限定名称   必须使用类来访问   静态变量如上所示   程序

应用于您的示例以使用someProperty

编辑:我也注意到你的构造函数定义对于C1是错误的。你不能在类中的构造函数上定义类,否则会出现这样的错误:

'C1': member names cannot be the same as their enclosing type