美文网首页
C#构造函数

C#构造函数

作者: 86a262e62b0b | 来源:发表于2019-10-16 13:27 被阅读0次

参考:
https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/constructors

一.实例构造函数

使用 new 表达式创建类的对象时,实例构造函数可用于创建和初始化任意实例成员变量。

1. 类

  • 如果某个类没有构造函数,则会自动生成一个无参数构造函数,并使用默认值来初始化对象字段。 例如,int 初始化为 0。

2. struct

  • structs 不包含显式无参数构造函数(不能申明无参构造函数),因为编译器将自动提供一个显式无参数构造函数。 此构造函数会将 struct 中的每个字段初始化为默认值
  • 但是,只有使用 new 实例化 struct 时,才会调用此无参数构造函数。 例如,此代码使用 Int32 的无参数构造函数,因此可确保整数已初始化:
int i = new int();  
Console.WriteLine(i); 

文档是这么说的,但实际不对:
但是,下面的代码会导致编译器错误,因为它不使用 new,而且尝试使用尚未初始化的对象:

int i;  
Console.WriteLine(i);  

或者,可将基于 structs 的对象(包括所有内置数值类型)初始化或赋值后使用,

二. 私有构造函数

如果类具有一个或多个私有构造函数而没有公共构造函数,则其他类(除嵌套类外)无法创建该类的实例。

  • 声明空构造函数可阻止自动生成无参数构造函数。 请注意,如果不对构造函数使用访问修饰符,则在默认情况下它仍为私有构造函数。 但是,通常会显式地使用 private 修饰符来清楚地表明该类不能被实例化。

  • 当没有实例字段或实例方法(例如 Math 类)时或者当调用方法以获得类的实例时,私有构造函数可用于阻止创建类的实例。 如果类中的所有方法都是静态的,可考虑使整个类成为静态的。 有关详细信息,请参阅静态类和静态类成员

注意:请注意,如果不对构造函数使用访问修饰符,则在默认情况下它仍为私有构造函数(只写名字)。 但是,通常会显式地使用 private 修饰符来清楚地表明该类不能被实例化。

三. 静态构造函数

特点:

  • 静态构造函数不能继承或重载。

  • 静态构造函数不使用访问修饰符或不具有参数。

  • 类或结构只能有一个静态构造函数。

  • 静态构造函数不能直接调用,并且仅应由公共语言运行时 (CLR) 调用。 可以自动调用它们。

  • 用户无法控制在程序中执行静态构造函数的时间。

  • 在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数以初始化类。 静态构造函数应在实例构造函数之前运行。 请注意,分配给事件或委托的静态方法被调用(而不是分配)时,将调用类型的静态构造函数。 如果静态构造函数类中存在静态字段变量初始值设定项,它们将在执行静态构造函数之前立即以在类声明中显示的文本顺序执行。

  • 如果未提供静态构造函数来初始化静态字段,会将所有静态字段初始化为其默认值,如默认值表中所列。

详细请参考:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/static-constructors

四. base和this关键字

  • 在派生类中,如果不使用 base 关键字来显式调用基类构造函数,则将隐式调用无参数构造函数(若有)。 这意味着下面的构造函数声明等效:
//1.隐式
public Manager(int initialData)
{
    //Add further instructions here.
}

//2.显示
public Manager(int initialData) : base()
{
    //Add further instructions here.
}

如果基类没有提供无参数构造函数,派生类必须使用 base 显式调用基类构造函数。

  • 构造函数可以使用 this 关键字调用同一对象中的另一构造函数。
  • 和 base 一样,this 可带参数使用也可不带参数使用,构造函数中的任何参数都可用作 this 的参数,或者用作表达式的一部分。 例如:
public Employee(int weeklySalary, int numberOfWeeks) : this(weeklySalary * numberOfWeeks)
{
}

相关文章

  • C#构造函数中this和base的使用

    C#构造函数中this和base的使用 结论 构造函数的作用是,给对象成员进行初始化。 然后,构造函数this和b...

  • 2021-02-18【Dart】语法记录

    1.命名构造函数 c#改写:可以使用静态函数:

  • Unity面试刷题库

    C#问题 1.在类的构造函数前加上static会报什么错?为什么? 答:在构造函数如果有public修饰的静态构造...

  • C# 构造函数 this base

    一、C#构造函数中:this()的作用[https://www.cnblogs.com/luguangguang/...

  • C#构造函数

    什么是构造函数? 构造函数,是一种特殊的方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new...

  • C# 构造函数

    每当创建类或结构时,将会调用其构造函数。 类或结构可能具有采用不同参数的多个构造函数。 使用构造函数,程序员能够设...

  • C#构造函数

    参考:https://docs.microsoft.com/zh-cn/dotnet/csharp/program...

  • 《小白H5成长之路45》JS如何实现一个完美的类继承

    “朱哥,C#和java中的构造函数我明白什么意思,可是在js中并没有定义构造函数的说明,javascript中的构...

  • C# 构造函数总结

    构造函数 构造函数分为:实例构造函数,静态构造函数,私有构造函数。 实例构造函数 1、构造函数的名字与类名相同。 ...

  • C#之构造函数

    定义 当我们使用类通过new关键字来创建一个对象的时候,其实是调用了这个类的构造方法。任何时候,只要创建[类]或[...

网友评论

      本文标题:C#构造函数

      本文链接:https://www.haomeiwen.com/subject/jarfjctx.html