54.父类静态成员属性在子类的体现

  1. 54.父类静态成员属性在子类的体现
    1. 54.1 题目
    2. 54.2 深入解析
    3. 54.3 答题示例
    4. 54.4 关键词联想

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_ISon2.static_IFather.static_I 访问的是同一字段,与是否存在实例无关;子类并未各自持有一份副本。


54.3 答题示例

“打印结果是:

30
30
30

这是因为静态成员属性属于类本身,而非类的实例或子类。在C#中,无论通过哪个子类(如Son1Son2)访问父类的静态成员(如static_I),本质上操作的都是同一个内存地址的变量。

当执行Son1.static_I = 20时,父类Father的静态变量被赋值为20;随后执行Son2.static_I = 30,同一个变量被覆盖为30。因此,最后通过FatherSon1Son2访问该变量时,结果均为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

×

喜欢就点赞,疼爱就打赏