54.父类静态成员属性在子类的体现
54.1 题目
class Father
{
public static int static_I = 0;
}
class Son1 : Father
{
}
class Son2 : Father
{
}
class Program
{
static void Main(string[] args)
{
Son1.static_I = 20;
Son2.static_I = 30;
Console.WriteLine(Father.static_I);
Console.WriteLine(Son1.static_I);
Console.WriteLine(Son2.static_I);
}
}
游戏开发完成后,父类中定义了一个静态成员属性,有两个子类都继承该父类,请问打印结果是什么?为什么?
54.2 深入解析
都是30。因为静态成员属于类而不是实例。
在 C# 中,静态字段属于声明该成员的类(此处为 Father)。Son1.static_I、Son2.static_I 与 Father.static_I 访问的是同一字段,与是否存在实例无关;子类并未各自持有一份副本。
54.3 答题示例
“打印结果是:
30 30 30这是因为静态成员属性属于类本身,而非类的实例或子类。在C#中,无论通过哪个子类(如
Son1或Son2)访问父类的静态成员(如static_I),本质上操作的都是同一个内存地址的变量。当执行
Son1.static_I = 20时,父类Father的静态变量被赋值为20;随后执行Son2.static_I = 30,同一个变量被覆盖为30。因此,最后通过Father、Son1或Son2访问该变量时,结果均为30。”
54.4 关键词联想
- 静态成员(Static Members)
- 类级别共享(Class-Level Sharing)
- 单一存储位置(Single Storage Location)
- 继承与静态变量(Inheritance and Static Variables)
- 访问修饰符(public/private)
- 类名限定访问(Class Name Qualification)
- 静态构造函数(Static Constructor)
- 与实例成员对比(Instance Members vs. Static Members)
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com