C#基础构造函数:最熟悉的陌生人
Posted 嘿星星
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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#基础构造函数:最熟悉的陌生人的主要内容,如果未能解决你的问题,请参考以下文章