如果我有一个类:
public class C1
{
public class SC1 {}
public class SC2 {}
public class C1()
{
}
}
为什么我不能这样做:
C1 c1 = new C1();
c1.SC1.somePropety = 1234;
答案 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)
C1
,C1.SC1
和C1.SC2
是独立的类。对于C1.SC1
和C1.SC2
,外部C1
类充当一种奇怪的命名空间。
您仍然需要创建C1.SC1
(new C1.SC1().someProperty = 1234
)的实例才能访问其上的非静态成员。
(但是,内部类具有的一个特性是能够访问外部类实例上的私有成员。内部类和外部类仍然是独立的 - 只是在内部类的范围内,{{1开始表现得像private
。)
答案 3 :(得分:1)
我建议您阅读MSDN上的相关文章,了解有关嵌套类的信息:
答案 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