我们试想一下现在有一个类Parent,它有一个static的int类型字段number,然后如果类Parent有三个子类Child01、Child02和Child03,那么改变Parent.number的值的话,Child01.number、Child02.number和Child03.number的值也会被更改吗?

新建一个.NET Core的控制台项目,我么来看看如下代码:

using System;

namespace ConsoleApp
{
/// <summary>
/// 父类
/// </summary>
class Parent
{
public static int number = ;
} /// <summary>
/// Child01继承父类Parent
/// </summary>
class Child01 : Parent
{ } /// <summary>
/// Child02继承父类Parent
/// </summary>
class Child02 : Parent
{ } /// <summary>
/// Child03继承父类Parent
/// </summary>
class Child03 : Parent
{ } class Program
{
static void Main(string[] args)
{
Parent.number = ;
Child01.number = ;
Child02.number = ;
Child03.number = ; Console.WriteLine("Parent.number:" + Parent.number.ToString());
Console.WriteLine("Child01.number:" + Child01.number.ToString());
Console.WriteLine("Child02.number:" + Child02.number.ToString());
Console.WriteLine("Child03.number:" + Child03.number.ToString()); Console.WriteLine("Press any key to quit...");
Console.ReadKey();
}
}
}

结果如下:

很明显类Parent、Child01、Child02、Child03的number变量实际上都是指向的内存中栈(stack)的相同地址,也就是说类Child01、Child02和Child03在继承Parent类后,并不是在内存中新建了三个变量Child01.number、Child02.number和Child03.number,而是使用的同一个Parent.number变量。

然后现在我们将代码改成如下:

using System;

namespace ConsoleApp
{
/// <summary>
/// 父类
/// </summary>
class Parent
{
public static int number = ;
} /// <summary>
/// Child01继承父类Parent,并定义自己的number变量,隐藏父类Parent的number变量
/// </summary>
class Child01 : Parent
{
public static new int number = ;
} /// <summary>
/// Child02继承父类Parent,并定义自己的number变量,隐藏父类Parent的number变量
/// </summary>
class Child02 : Parent
{
public static new int number = ;
} /// <summary>
/// Child03继承父类Parent,并定义自己的number变量,隐藏父类Parent的number变量
/// </summary>
class Child03 : Parent
{
public static new int number = ;
} class Program
{
static void Main(string[] args)
{
Parent.number = ;
Child01.number = ;
Child02.number = ;
Child03.number = ; Console.WriteLine("Parent.number:" + Parent.number.ToString());
Console.WriteLine("Child01.number:" + Child01.number.ToString());
Console.WriteLine("Child02.number:" + Child02.number.ToString());
Console.WriteLine("Child03.number:" + Child03.number.ToString()); Console.WriteLine("Press any key to quit...");
Console.ReadKey();
}
}
}

现在我们在子类Child01、Child02和Child03中分别定义了自己的number变量,并用关键字new隐藏了父类Parent的number变量,我们来看看现在运行的结果:

很明显,由于子类Child01、Child02和Child03中都有了各自的number变量,现在相当于这三个子类在内存中新建了三个变量Child01.number、Child02.number和Child03.number,所以现在每个类中number变量都拥有了不同的值。

所以请记住C#类中子类继承父类后,其和父类使用的是相同的静态字段,子类并不会和父类在内存中使用不同的静态字段。

C# 类中的静态字段始终继承自基类的更多相关文章

  1. spring 项目中在类中注入静态字段

    有时spring 项目中需要将配置文件的属性注入到类的静态字段中 例如:文件上传 //文件上传指定上传位置 //resource-dev.properties 有如下参数 #upload UPLOAD ...

  2. java中使用静态字段和构造函数跟踪某个类所创建对象的个数

    对于这个问题,我们都知道java中使用类时会自动调用构造函数.按照这个思路我们可以定义一个static int 形的常量count 然后将count++放入这个类的构造函数中,这样只要输出count的 ...

  3. 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针

      您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. ...

  4. C/C++ 多继承{虚基类,虚继承,构造顺序,析构顺序}

    C/C++:一个基类继承和多个基类继承的区别 1.对多个基类继承会出现类之间嵌套时出现的同名问题,如果同名变量或者函数出现不在同一层次,则底层派生隐藏外层比如继承基类的同名变量和函数,不会出现二义性, ...

  5. C++ | 继承(基类,父类,超类),(派生类,子类)

    转载:https://blog.csdn.net/Sherlock_Homles/article/details/82927515 文章参考:https://blog.csdn.net/war1111 ...

  6. 使用虚幻引擎中的C++导论(二-UE4基类)

    使用虚幻引擎中的C++导论(二) 第一,这篇是我翻译的虚幻4官网的新手编程教程,原文传送门,有的翻译不太好,但大体意思差不多,请支持我O(∩_∩)O谢谢. 第二,某些细节操作,这篇文章省略了,如果有不 ...

  7. C++//菱形继承 //俩个派生类继承同一个基类 //又有某个类同时继承俩个派生类 //成为 菱形继承 或者 钻石 继承//+解决

    1 //菱形继承 2 //俩个派生类继承同一个基类 3 //又有某个类同时继承俩个派生类 4 //成为 菱形继承 或者 钻石 继承 5 6 #include <iostream> 7 #i ...

  8. File类里的静态字段

    我们都知道windows操作系统和Linux操作系统中的路径分隔符是不一样的,当我们直接使用绝对路径的时候,程序会报错误:No such file or diretory”的异常 File类有几个类似 ...

  9. PHP 访问类中的静态属性

    静态属性和普通属性不一样,静态属性只属于类本身而不属于类的任何实例,所以他们的访问方式也不一样.你可以把静态属性认为是存储在类当中的全局变量,而且你可以在任何地方通过类来访问它们. 在类本身中访问静态 ...

随机推荐

  1. 读EntityFramework.DynamicFilters源码_心得_示例演示02

    上次对EntityFramework.DynamicFilters整体的项目结构有了一个认识,这次我们就通过阅读说明文档,示例项目,和单元测试,来动手构建一个我们的体验项目,通过对动态过滤器的使用,使 ...

  2. java设计模式之抽象工厂模式学习

    工厂模式有个问题就是,类的创建依赖工厂.要想增加一个工厂类,就要修改原来的代码,这违背了闭包原则.所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的 ...

  3. flask 继承模版的基本使用

  4. ASP.NET 后台验证 TextBox 值是否为数字

    记得最开始 using System.Text.RegularExpressions; Regex m_regex = new System.Text.RegularExpressions.Regex ...

  5. IntelliJ IDEA开发工具println报错的解决方法

    IntelliJ IDEA 编译 JSP,出现 out.println 报错,下图所示: 报错原因:println报红,这是因为没有关联好服务器! 解决方案:点击File->Project st ...

  6. 关于YARN的基本结构

  7. android webview 播放 video经验总结

    在目前PC浏览器上,对video的支持基本都没什么问题了.但是如果用webview去跑这样的页面就会遇到许多问题. 下面一段html <!DOCTYPE html> <html> ...

  8. 从传输流收到意外的 EOF 或 0 个字节

    /// <summary> /// 发送POST请求 /// </summary> /// <param name="json"></pa ...

  9. eclipse tomcat jdk 版本引用

    今日遇到一个问题,因为比较难找,所以记录下来,方便日后查阅,也许也可以帮助同行. 一个Java project工程,使用了solr6.2,所以需要引用jdk8才可以正常使用. 代码编写好了,已经提交s ...

  10. 【转】关于色彩空间sRGB和Adobe RGB...

    以前对这个问题一直很困惑.... 下面采用问答形式.A:相机中的SRGB和ADOBE RGB有什么区别 ADOBE貌似颜色淡.什么时候有用处呢? B:不是这样的,ADOBE RGB的色域要比SRGB要 ...