C#基础构造函数:最熟悉的陌生人

Posted 嘿星星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#基础构造函数:最熟悉的陌生人相关的知识,希望对你有一定的参考价值。

【C#基础】构造函数:最熟悉的陌生人

   构造函数作为C#中最常见的,但其实也是最陌生的,它究竟是什么,下面就让我们好好来讨论一下吧!


构造函数:

构造函数的唯一作用,就是为所属类的字段赋予初始化值。

构造函数具有三个经典特征:

1:构造函数会在实例化类时自动调用。

2:构造函数必须与类名相同。

3:构造函数没有返回值。


构造函数的重载:

    不需要给类提供构造函数,因为编译器会在后台默认生成一个构造函数,该构造函 数是一个最基本的构造函数,只能够把所有成员字段初始化为标准的默认值。
    编译器自动生 成的构造函数通常已经足够使用了,但用户仍然可以自主编写属于自己的构造函数,并且也可以重载构造函数。

注意:如果编写了构造函数,那么编译器就不会提供默认的构造函数,只有没有定义任何构造函数的情况下,编译器才会自动提供默认的构造函数。

public class MyNumber
{
  private int _number;
  public MyNumber(int number)
  
{
    _number = number;
  }
}
var numb = new MyNumber(); // error

上图为自定义的构造函数


    构造函数的重载遵循与其他方法相同的规则,这意味着可以为构造函数提供任意多的重载,只要它们的签名有明显的区别即可。


class Car
{

    private string _des;
    private int _num;

    public Car(string des, int num)
    
{
        _des = des;
        _num = num;
    }

    public Car(string des)
    
{
        _des = des;
        _num = 4;
    }
}

上图为构造函数的重载


    多个签名不同的构造函数可能包含着一些共同的函数体,这时,c#有一个特殊的语法,称为构造函数初始化器,可以更好的处理代码。


注意,构造函数初始化器会在构造函数的函数体之前执行: 


class Car
{
    private string _des;
    private int _num;

    public Car(string des, int num)
    
{
        _des = des;
        _num = num;
    }

    public Car(string des): this(des, 4)
    
{
    }
}

上图为构造函数初始化器


    构造函数初始化器可以包含对同一个类的另一个构造函数的调用,如上图this,也可以包含对直接基类的构造函数的调用,使用base代替this,其他相同,但初始化器中不能有多个调用。


关于this关键字:

1:this关键字代表当前对象,当前运行在内存中的那一个对象。

2:this关键字后面跟":"符号,可以调用其它的构造函数。

3:可用作扩展方法的第一个参数的修饰符。

4:限定被类似名称隐藏的成员。

5:将对象作为参数传递到其他方法。

6:声明索引器。


注:静态成员函数,因为它们存在于类级别且不属于对象,不具有 this 指针。 在静态方法中引用 this 是错误的。

    另外,如果构造函数的实现由一个表达式组成,那么构造函数可以通过一个表达式体来实现:


class Car
{

    private static int _num;
    private Car(int num) => _num = num;
}

上图为构造函数表达式体


静态构造函数:

    实例构造函数,只要创建类的对象,就会执行它,而无参数的静态构造函数,只会执行一次。


    这种静态构造函数存在的原因是,有一些静态字段或属性,需要在第一次使用类之前,从外部源中初始化这些静态字段和属性。


public static class color
{
    public static string backclolor { get; }

    static color()
    
{
        DateTime now = DateTime.Now;
        if (now.DayOfWeek == DayOfWeek.Saturday)
        {
            backclolor = "Green";
        }
        else
        {
            backclolor = "Red";
        }
    }
}

上图为静态构造函数


1:静态构造函数会在调用类中任何成员之前执行。

2:一个类只能有一个静态构造函数。

3:静态构造函数只能访问静态成员,不能访问实例成员。


注意:多个类拥有静态构造函数,先执行哪个静态函数无法确定,其代码不应该依赖于其他静态构造函数的执行情况。


构造函数的修饰符:

    构造函数可以被private或protected修饰,这样不相关的类就不能访问它们,不能使用new运算符在外部实例化,但可以在类本身的内部编写一个公有的静态属性或方法,以实例化该类。


通常,在以下两种情况下是有用的:

1:类仅用作某些静态成员或属性的容易,因此永远不会实例化它。

2:希望类仅通过调用某个静态成员函数来实例化,(这就是所谓对象实例化的类工厂方法)。


点击参与讨论一起聊聊吧!

嘿星星 发起了一个读者讨论 关于构造函数,大家还有什么要补充的呢?

加入微信圈子

一起讨论、学习、打卡吧!

以上是关于C#基础构造函数:最熟悉的陌生人的主要内容,如果未能解决你的问题,请参考以下文章

MySQL窗口函数,你最熟悉的陌生人~

MySQL窗口函数,你最熟悉的陌生人~

C#基础----方法与构造函数

《C#零基础入门之百识百例》(四十三)类的构造和析构函数 -- 模拟用户注册

C# 最有用的(自定义)代码片段是啥? [关闭]

C#基础 可选参数调用params无参静态构造函数