首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么不是所有在C#中调用的静态构造函数(即父类的那些)?

在C#中,静态构造函数是在类被加载时自动调用的特殊方法。它们用于执行类的初始化操作,并且只会被调用一次。然而,并不是所有在C#中调用的静态构造函数都是父类的。

首先,静态构造函数只会被调用一次,无论类被实例化多少次。这意味着,如果一个类的子类在调用静态构造函数之前已经调用了父类的静态构造函数,那么父类的静态构造函数不会再次被调用。

其次,如果一个子类没有自己的静态构造函数,它会继承父类的静态构造函数。这意味着,当子类被加载时,父类的静态构造函数会被自动调用。

然而,并不是所有在C#中调用的静态构造函数都是父类的。如果一个子类定义了自己的静态构造函数,那么它将覆盖父类的静态构造函数。在这种情况下,当子类被加载时,只会调用子类自己的静态构造函数,而不会调用父类的静态构造函数。

总结起来,不是所有在C#中调用的静态构造函数都是父类的,这取决于子类是否定义了自己的静态构造函数。如果子类没有定义自己的静态构造函数,那么在子类被加载时,会自动调用父类的静态构造函数。如果子类定义了自己的静态构造函数,那么只会调用子类自己的静态构造函数,而不会调用父类的静态构造函数。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

创建子类对象时,构造函数调用被子类重写方法为什么调用是子类方法?

A对象时候调用子类方法?...但是:创建B对象调用方法? 答案: 当子类被加载到内存方法区后,会继续加载到内存。...如果,子类重写了方法,子类方法引用会指向子类方法,否则子类方法引用会指向方法引用。 如果子类重载了方法,则子类重载方法引用还指向子类方法。...如果子类方法没有重写也没有重载方法,则方法引用会指向方法。 当子类对象创建时,会先行调用构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。...但是:由于java语言是静态多分派,动态单分派。其结果是当编译时候,构造方法调用方法参数已经强制转换为符合方法参数了。 上边代码在编译前已经转换为下面这个样子了。

6.2K10

关于Java构造函数(Constructor)常见问题总结1 为什么调用子类构造方法时候,默认会调用构造方法2 常见错误:Implicit super constructor is und

这就是为什么我们上面的那个例子程序会先调用super构造方法。 但要切记,** 虽然调用构造方法,但只创建了一个对象也就是子对象。...上一小节,我们知道,如果子类构造函数,没有显示调用构造函数,那么,编译器就会插入super(),也就是自动调用无参构造函数。但是此时,没有无参构造函数,所以就会报错了。...解决这个问题很简单,我们可以给插入一个无参构造函数,或者子类构造函数显示调用有参构造函数子类构造函数显示调用构造函数 下面的代码是正确。 ?...Paste_Image.png 构造函数使用规则 简单说,使用时候,子类构造函数必须调用构造函数,不管有没有显示声明。所以,被调用构造函数,一定在定义好!...为什么Java一个已经实现了一个带参构造函数时候,不实现默认无参构造函数? 这是个很有趣问题。

2.9K41
  • ASP.NET AJAX(6)__Microsoft AJAX Library面向对象类型系统命名空间——构造函数——定义方法——定义属性——注册——抽象——继承——调用

    可重复注册命名空间,每个独立脚本模块前都要注册命名空间以保证命名空间存在 定义构造函数 定义成员(方法、属性、事件) 注册 ——构造函数 构造函数即为function定义 通常用于初始化域变量..._mymethod=function{throw Error.notImplemented();}}//包含抽象方法 ——继承 调用构造函数必须调用构造函数,否则会丢失继承效果...(不和c#相同,c#自动调用) MyNamespace.MyClass=function(){MyNamespace.MyClass.initializeBase(this,[param1,…])} 注册时候提供...= function(name) { MyNamespace.Intern.initializeBase(this, [name]);//调用构造函数 } MyNamespace.Intern.prototype...Employee三个 接口 与定义方法大致相同 构造函数抛出异常 所有的方法抛出异常(只有方法签名,不提供实现) 注册接口时使用registerInterface方法 接口无法继承其他接口 接口定义

    6.2K50

    .NET面试题系列 - C# 基础知识(1)

    并且如果类型有静态成员,则初始化它们,如果类型有静态构造函数调用静态构造函数,初始化或者修改(因为静态构造函数初始化静态成员之后进行,所以可能会造成修改)静态成员值。...我们要看虚方法有没有被人重写,还要根据调用虚方法对象(e)确定使用方法,还是子类重写方法。...创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类型对象)。这个静态构造函数只会执行一次。 无法直接调用静态构造函数。它访问修饰符是private(不需要写明)。...程序,用户无法控制何时执行静态构造函数静态构造函数不应该调用基类型静态构造函数。这是因为类型不可能有静态字段是从基类型分享或继承。...如果我们不了解堆上内存分配方式,对静态构造函数理解会十分困难。为什么创建第一个实例之前?为什么不能直接调用为什么不能有参数?我们完全无法理解,只能通过死记硬背方式记住这些性质。

    1.9K20

    C# .NET面试系列二:面向对象

    然而,派生可以调用构造函数,并可以派生构造函数通过 base 关键字调用构造函数,实现对基构造函数间接调用。...执行顺序:静态构造函数,子类静态构造函数静态字段初始化,子类静态字段初始化,实例构造函数静态字段初始化,子类实例构造函数,子类静态字段初始化,方法调用静态构造函数...C# 中有没有静态构造函数,如果有是做什么用?是的,C# 存在静态构造函数静态构造函数一种特殊类型构造函数,用于初始化静态成员和执行一次性初始化操作。...C#静态方法不能直接访问非静态变量。这是因为静态方法是与关联,而非静态变量是与实例关联静态方法,没有隐式 this 实例,因为静态方法是属于整个不是实例。...序列化过程成员变量将被转换为可传输或可存储格式。 请注意,不是所有都需要进行序列化。

    22910

    C++区别于其他语言知识点总结

    ,仅给数据成员分配空间安 8.构造函数 析构函数 Box box(); //不是定义对象 是函数声明 C++构造函数不能在任何地方调用。...//析构函数 ~Box() { delete p[]; } //对象失去声明体征时候最后一次调用函数 //析构函数调用顺序与构造函数调用顺序刚好相反 构造后析构 9.初始化列表...//A定义体中用一下语句声明B为其友元 friend B; //友元B所有函数都是A友元函数 17.运算符重载 为什么要重载,使操作简便。...Java默认是多态 所有函数都是多态(编译时多态和运行时多态,编译时多态指重载,运行时多态指函数根据参数实际类型调用,而不是声明类型)。 C++所有函数默认是都不是多态。...子类隐藏方法 如果是多态方法(虚方法):子类覆盖方法 //析构函数之前加virtual //虚析构函数,解决子类对象赋值给指针后,当delete指针时,无法调用子类析构函数问题

    915100

    面向对象编程基础2(干货)

    注意:为屏蔽那个方法,派生声明名称和类型、及函数名都要与对应方法相同,且声明这个方法时候要用new关键字。 ? ?...多态--通过指向派生(统一)调用调用函数,会根据引用所指向派生实际类型,调用派生同名重写函数,即为多态(个性张扬)。...4.构造函数小补充 小概念:容器构造函数,若多个派生都继承与一个基,那么new他时候,一个个new很麻烦,所以有了容器构造函数来减少代码量,也更加清晰。 ?...可以为静态定义一个静态构造函数静态主要用于基础库(如数学 Math)和扩展方法。可以用数学上定力来理解。自带那些。...目的是缩小泛型参数范围。泛型和方法都可以添加约束,只有添加了约束,才能调用泛型参数方法,否则只能调用那些其他方法。关键词where。 ? ? ?

    1.1K20

    C++学习知识点

    (2)C++支持多重继承,子类可以有多个,而C#不支持多重继承,可用接口来实现,但C++没有接口类型。 (3)C++申明方式不分公有和私有,继承时候分公有,私有和保护方式继承。...而C#刚好相反。 (4)C++纯虚函数C#叫虚构函数。...: 主要是性能问题,对于内置类型,如int, float等,使用初始化表和在构造函数体内初始化差别不是很大,但是对于类型来说,最好使用初始化列表,使用初始化列表少了一次调用成员默认构造函数过程...使用const修饰引用表示常引用,引用变量是常变量,这样一来,是防止函数对常引用修改,多用于修饰常对象。如果将值调用形参声明为常量,则没有多大使用价值。...返回存放于堆中空间首地址,需要指针接收,如GPR* gpr=new GPR,此时调用默认构造函数无参构造函数

    1.7K20

    A4第四章第2节null和成员变量、局部变量不同初始化

    = new MyTest(); 【静态代码块第一次被使用时候执行一次,构造函数执行之前执行。...可以通过super(参数)去访问有参构造函数。可以通过this(参数...)去访问本类其他构造函数。...,则就不会有默认无参构造函数;如果没有默认,则子类构造函数必须显示调用构造函数 一个如果没有定义其他构造函数,则有一个【默认无参构造函数】。...构造函数会默认调用【无参构造函数】 子类无参或者是有参构造函数都会默认调用【无参构造函数】 A4第四章第16节 private、public和protected区别 第四章第16节 private...Abstract 子类为它们所有抽像方法提供实现,否则它们也是抽像为。取而代之,子类实现该方法。知道其行为其它可以实现这些方法。

    54010

    【《Effective C#》提炼总结】提高UnityC#代码质量21条准则

    原则8 选择变量初始化而不是赋值语句 成员初始化器是保证类型成员均被初始化最简单方法——无论调用是哪一个构造函数。初始化器将在所有构造函数执行之前执行。...● 静态构造函数是一个特殊函数,将在其他所有方法执行之前以及变量或属性被第一次访问之前执行。可以用这个函数来初始化静态变量,实现单例模式或执行可用之前必须进行任何操作。...而若是要更复杂一些逻辑来初始化静态成员变量,那么可以使用静态构造函数。 ● 使用静态构造函数不是静态初始化器最常见理由就是处理异常。使用静态初始化器时,我们无法自己捕获异常。...这样使得最终对象可以执行最少代码来保证初始化正确性。 ● 构造函数初始化器允许一个构造函数调用另一个构造函数。而C# 4.0添加了对默认参数支持,这个功能也可以用来减少构造函数重复代码。...你可以将某个所有构造函数统一成一个,并为所有的可选参数指定默认值。其他几个构造函数调用某个构造函数,并提供不同参数即可。

    1.7K30

    JAVA基础面试总结

    调用Thread对象start()方法,启动线程,如: 方法二:定义一个去继承Thread,重写run()方法。run()方法中加入具体任务代码或处理逻辑。...静态代码块 --- 构造方法 --- 子类中非静态代码块 --- 子类构造方法 --- 接下来才是 对象调用方 法。...上面程序 ts.test(); ts作为上转型对象调用是 子类继承方法,因为test()子类中被重写了,所以输出为子类语句。...== 中非静态代码块 =========构造方法======== 构造方法 ========无名称方法体======== 子类中非静态程序块 =========子类构造方法========...= 中非静态代码块 =========构造方法======== 构造方法 ========无名称方法体======== 子类中非静态代码块 =========子类构造方法======== 子类构造方法

    78680

    2022年Unity 面试题 |五萬字 二佰道| Unity面试题大全,面试题总结【全网最全,收藏一篇足够面试】

    构造函数前加上static会报什么错?为什么? 13.C# String类型比 stringBuilder 类型优势是什么?...构造函数前加上static会报什么错?为什么?...构造函数格式为public+名如果加上 static 会报错(静态构造函数不能有访问、型对象,静态构造函数只执行一次; 运行库创建实例或者首次访问静态成员之前,运行库调用静态构造函数静态构造函数执行先于任何实例级别的构造函数...析构函数 C# ,不能控制析构函数调用时间,原因是析构函数由垃圾回收器自动调用。 析构函数 构造函数:与 C++ 类似,如果在 C# 没有提供构造函数,则为您自动生成默认构造函数。...该默认构造函数所有字段初始化为它们默认值。 C# ,方法参数不能有默认值。如果要获得同样效果,需使用方法重载。 35.

    23.3K1731

    C#语言和JAVA、C++对比学习

    而JAVA往往和C++通信时候,就要考虑那些负数是不是其实本来应该是正数。 静态方法调用名和小数点“.”连接,而不是C++“::”连接。...除了用来构造对象,还可以用来隐藏基被继承成员,同时也可以用来泛型使用约束模板参数必须带有公共无参数构造器——这点在JAVA里面也是靠所谓JavaBean规范来约定,而C#则直接提供了语言支持...但是C#里面,还可以用来构建自动资源回收代码段:using(…){…} ,代码段结束时候,括号创建资源会被自动调用IDisponse接口以回收资源。...JAVA构造函数继承一直是一个笑话,因为如果你子类构造函数调用某个特殊形态构造函数,这个调用实际上不是在你代码所在地方运行!这简直是对程序代码欺骗。...C++里面我们往往会用一些看起来是函数调用yield()来做goto事情,实在是被迫无奈。

    1.8K40

    Javascript基础回顾 之(一) 类型

    本系列所有内容都是涉及Javascript基础,没有时髦玩意儿,但是我相信这些基础东西会有助于你理解那些有趣东西。...好玩之五: null == undefined 是成立。     但是想一想,Null和Undefined毕竟是两种不同类型,即使他们是和子类关系,C#里面和子类也不能相等啊,不是么?...Object 与 object   Javascript高级程序一书中说到 ”函数ECMAScript是对象,不是一种数据类型”。...C#定义: namespace ConsoleApplication1 { class Person { public string Name { get; set; } public...如果我们Javascript中用function定义,他们实例将永远是object, 包括原生那些Date, Array, RegExp。

    71670

    Javascript基础回顾 之(一) 类型

    本系列所有内容都是涉及Javascript基础,没有时髦玩意儿,但是我相信这些基础东西会有助于你理解那些有趣东西。...好玩之五: null == undefined 是成立。     但是想一想,Null和Undefined毕竟是两种不同类型,即使他们是和子类关系,C#里面和子类也不能相等啊,不是么?...Object 与 object   Javascript高级程序一书中说到 ”函数ECMAScript是对象,不是一种数据类型”。...C#定义: namespace ConsoleApplication1 { class Person { public string Name { get; set; } public...如果我们Javascript中用function定义,他们实例将永远是object, 包括原生那些Date, Array, RegExp。

    40950

    那些年~~~我们C#笔试内测题目

    a) 虚方法必须有方法体,可以被子类重写 b) 抽象方法不允许有方法体,且必须被子类重写 c) 抽象方法必须在抽象,而虚方法可以在所有 密封静态不能书写 d) 子类重写抽象方法或虚方法...15) C#,( C)关键字用于子类构造函数明确指明调用构造函数。...a) new  创建对象时使用 b) this   代表当前实例 c) base  显示调用构造方法和类属性和常规方法 d) is 16) C#多态不能通过(D )实现。...a) 单例模式,允许通过new 构造实例 b) 单例模式确保某个只有一个实例,而且自行实例化并向整个系统提供这个实例 c) C# ,static 是实现单例模式重要关键字 d) 单例模式可以确保所有对象都访问唯一实例...22) 下面不是C#访问修饰符是(AD)。

    2.4K111

    Kotlin|这些隐藏内存陷阱,你应该熟记于心

    但编程从来不是一件简单工作,所有简洁都是建立复杂底层实现上。那些看似简单kt代码,内部往往隐藏着不容忽视内存开销。...♂️ 答案是可以,我们利用 接口 改造即可,如下所示: 如上所示,我们增加了一个名为 IFruit 接口,并让 密封 实现了这个接口,子类默认构造函数实现该属性即可。...推荐示例 我们文章最开始提到了,Kotlin inline ,一般建议用于 高阶函数(lambda) 为什么呢?...总结如下: 因为内联函数会将方法函数移动到调用处,会增加调用代码量,所以对于较长方法应该避免使用; 内联函数应该用于使用了 高阶函数(lambda) 方法,而不是普通方法。...MainActivity初始化时,会先在 构造函数 初始化 lazy 对象, SYNCHRONIZED 对应 SynchronizedLazyImpl。

    81030

    Java内部类详解

    内部类 内部类(nested classes),面向对象程序设计,可以一个内部定义另一个。嵌套分为两种,静态嵌套和非静态嵌套。...匿名内部类 匿名内部类其实就是一个没有名字方法内部类,所以它符合方法内部类所有约束,除此之外,还有一些地方需要注意: 使用匿名内部类过程,我们需要注意如下几点: 1....使用匿名内部类时,我们必须是继承一个或者实现一个接口,但是两者不可兼得,同时也只能继承一个或者实现一个接口。 2. 匿名内部类是不能定义构造函数。 3....格式 new 构造器(参数列表)|实现接口() { //匿名内部类体部分 } 举一个简单例子:既然匿名内部类需要继承一个或者实现一个接口,所以我们先定义一个接口或者抽象都可以...以上就是所有的java内部类各种模式简单例子 大家要注意一点,java只能在内部类创建静态成员,也就是静态嵌套,也有很多人疑惑为什么 java 静态嵌套部类可以有非静态成员,还有为什么可以

    82321

    Java 回顾 ( Revisiting Java )

    Java中最关键概念是面向对象,面向对象最关键东西就是和对象,所有的Java程序都定义,你不能像python那样,打开.py文件就开始写东西,就可以执行了,也不像C++,定义一个main函数即可运行...Java即使main函数也要包括为什么面向对象是核心内容?它好处在哪呢?可以说,OO(面向对象)无处不在,OO使得我们很方便扩展功能,而不需要重复写很多代码!...新建对象时,构造函数先于子类被调用,以此类推,Object构造函数先被执行,然后往下推,直到目标对象类型 (先有父母才有你) 只有当完全没写构造函数时,Java才会自动帮你写一个无参构造函数。...super()调用构造函数,this是对对象本身引用 谈谈实例变量,实例变量即对象成员变量。...静态变量定义,它属于,不属于任何对象,但对象可以获得它。 静态变量由(该类所有对象所共享。 静态方法通过调用静态变量通过名存取 。

    1.6K20

    C#学习笔记三: C#类型详解..

    常量值被替换成初始化值;readonly修饰常量则延迟到运行时候 此外const常量既可以声明也可以函数体内,但是static readonly常量只能声明。...static字段和static构造函数 主要来说明执行顺序: 1、编译器在编译时候,先分析所需要静态字段,如果这些静态字段所在静态构造函数,那么就会忽略字段初始化;如果没有静态构造函数...3、而带有静态构造函数静态字段,只有引用到时候才进行初始化。...A.X, Aint X = B.Y + 1; 所以会接着调用B.Y, 因为B静态构造函数,所以就会对静态字段进行初始化。...A.X, Aint X = B.Y + 1; 所以会接着调用B.Y, 因为B中有静态构造函数,所以就会忽略字段初始化。

    1.3K140
    领券