访问静态 class 的非静态成员
Access nonstatic members of a static class
我有一个静态的class定义如下:
public static class Classroom
{
public string Name;
//other members
}
如何在另一个 class 中访问变量 Name
?
因为它是静态的class我无法创建这样的实例
Classroom ClassroomObj = new Classroom();
由于 Name
不是静态的,我无法在不创建实例的情况下访问它。那我怎样才能访问变量?
不能在静态中声明实例成员class
您还必须创建变量 static
:
public static class Classroom
{
public static string Name;
//other members
}
原因是:您的静态 class 可以被视为使用其名称访问的单个实例,而不是使用 new
创建实例并使用变量名访问它。因此,此静态 class 中的任何 属性 也必须具有 static
,以便再次使用 class 名称可用。
至于 static class
你可以' 创建它的实例:
public static class MyClass {
public static String SomeField;
....
}
// the class is static, no instances are allowed
var o = new MyClass(); // <- Compile time error!
但是,非静态(即实例)字段想要实例,其中无法提供 static class 的情况。这就是 非静态 字段在 static class 中不允许的原因。因此,您应该将 class 更改为 ordinal one:
// No static
public class Classroom
{
public string Name;
...
}
...
Classroom room = new Classroom();
room.Name = "123";
或者让 Name
也成为 static
(但是我怀疑你想要那种解决方案:这意味着你只有 一个 Classroom
):
public static class Classroom
{
// note "static"
public static string Name;
...
}
...
Classroom.Name = "123";
我有一个静态的class定义如下:
public static class Classroom
{
public string Name;
//other members
}
如何在另一个 class 中访问变量 Name
?
因为它是静态的class我无法创建这样的实例
Classroom ClassroomObj = new Classroom();
由于 Name
不是静态的,我无法在不创建实例的情况下访问它。那我怎样才能访问变量?
不能在静态中声明实例成员class
您还必须创建变量 static
:
public static class Classroom
{
public static string Name;
//other members
}
原因是:您的静态 class 可以被视为使用其名称访问的单个实例,而不是使用 new
创建实例并使用变量名访问它。因此,此静态 class 中的任何 属性 也必须具有 static
,以便再次使用 class 名称可用。
至于 static class
你可以' 创建它的实例:
public static class MyClass {
public static String SomeField;
....
}
// the class is static, no instances are allowed
var o = new MyClass(); // <- Compile time error!
但是,非静态(即实例)字段想要实例,其中无法提供 static class 的情况。这就是 非静态 字段在 static class 中不允许的原因。因此,您应该将 class 更改为 ordinal one:
// No static
public class Classroom
{
public string Name;
...
}
...
Classroom room = new Classroom();
room.Name = "123";
或者让 Name
也成为 static
(但是我怀疑你想要那种解决方案:这意味着你只有 一个 Classroom
):
public static class Classroom
{
// note "static"
public static string Name;
...
}
...
Classroom.Name = "123";