正如标题所示,我想了解为什么静态类只能有静态成员。我希望在所有编程语言中都是相同的。因此,我相信解释对于所有语言来说都是相同的。
正如标题所示,我想了解为什么静态类只能有静态成员。我希望在所有编程语言中都是相同的。因此,我相信解释对于所有语言来说都是相同的。
静态类无法被实例化,因此它将不会有任何实例,非静态成员需要其所属类的实例才能访问。由于静态类不能有任何实例,如果存在非静态成员,则无法访问。
因此,静态类只能拥有静态成员。
Circle
的类,则可以具有像CalculateArea
函数和PI
字段这样的静态成员。通常情况下,这些成员适用于所有圆形,仅仅因为它们是圆形。但是,您还可以具有与特定实例相关联的非静态成员,因为它们描述了特定圆形对象。这些可以是字段Diameter
和Circumference
。您还可以具有非静态函数,该函数根据存储在该特定实例的非静态字段中的数据计算圆的面积。静态类不能被实例化,因此无法访问非静态成员。
如果你想混合使用静态成员和非静态成员,请不要将类定义为静态的。
可能是因为实例方法永远无法被调用。
我不确定这是否相关,但是(至少在c# .net 4.0中),静态类可以包含非静态类定义,其中包含非静态成员。因此,似乎您可以向静态类添加非静态成员,因为嵌套类型被视为成员。
例如:
public static class MyClass
{
/// <summary>
/// This non-static class is accessible and able to be instantiated through the
/// static class MyClass.
/// </summary>
public class Type1
{
public String prop1 { get; set; }
public String funct1(String result)
{
return result;
}
}
/// <summary>
/// This function is inaccessible since it requires an instance of MyClass.
/// It will also cause a compile error.
/// </summary>
/// <returns></returns>
public String nonStaticFunc()
{
return "aString";
}
/// <summary>
/// This function is accessible through the MyClass type because it is also static
/// and therefore does not require a class instance.
/// </summary>
/// <returns></returns>
public static String staticFunc(String str)
{
return str;
}
}
正如您所看到的,静态类MyClass具有非静态类定义Type1,必须实例化才能使用。而MyClass中的静态函数staticFunc不需要实例即可访问。
//Valid operations
String result = MyClass.staticFunc("result"); //No class instance.
MyClass.Type1 someObj = new MyClass.Type1(); //Class instance from static class containing non-static nested type.
someObj.prop1 = someObj.funct1("hi");