摘要
在C#中,构造函数是一种特殊的方法,它用于创建类的实例并初始化其属性。构造函数的名称必须与类的名称相同,但不需要使用public、private或protected修饰符。在创建类对象时,调用构造函数将创建一个新的对象,并执行构造函数中定义的初始化逻辑。
在构造函数中,可以执行任何需要在对象创建时执行的操作,例如初始化对象的属性、创建数据库连接、加载数据等等。构造函数的语法类似于普通方法,但它们具有以下特点:
- 构造函数没有返回类型。
- 构造函数只能调用一次。
- 构造函数必须在对象创建时调用,即使对象不需要进行初始化。
- 如果类有多个构造函数,则在创建对象时,C#会自动选择调用哪个构造函数。
除了普通的构造函数之外,C#还支持带有参数的构造函数。带参数的构造函数允许在创建对象时传递值,从而实现对象的初始化。在构造函数中,可以使用这些参数来设置对象的属性值。
与构造函数类似,析构函数也是在垃圾回收或资源释放时执行的。析构函数可以在对象不再使用时执行清理操作,例如关闭数据库连接、释放内存等等。析构函数的名称与类的名称相同,但后面添加了后缀,例如Person()。
正文
构造函数
类中的一种特殊的方法
构造函数名与类名相同,不返回任何值
可初始化成员变量
public class Material
{
/// <summary>
/// 无参数构造函数
/// </summary>
public Material()
{
}
/// <summary>
/// 无参数构造函数
/// </summary>
public Material(string name, int qty, string location)
{
this.name = name;
this.qty = qty;
this.location = location;
}
private string name;//字段
//定义了一个Qty的属性
private int _qty = 0;
public int qty
{
get
{
return _qty;
}
set
{
if(value<0 || value > 100)
{
throw new ArgumentException("数据不在范围内!");
}
_qty = value;
}
}
//简单定义
public string location { get; set; }
public void Print()
{
Console.WriteLine($"{this.name},{this.qty},{this.location}");
}
}
调用
static void Main(string[] args)
{
Material material = new Material("A--1", 100, "SH01");
material.Print();
}
image.png
私有构造函数
public class Material
{
/// <summary>
/// 做了一个私有的构造
/// </summary>
private Material()
{
}
/// <summary>
/// 通过这种模式创建类
/// </summary>
/// <returns></returns>
public static Material Instance()
{
return new Material();
}
private string name;//字段
//定义了一个Qty的属性
private int _qty = 0;
public int qty
{
get
{
return _qty;
}
set
{
if(value<0 || value > 100)
{
throw new ArgumentException("数据不在范围内!");
}
_qty = value;
}
}
//简单定义
public string location { get; set; }
public void Print()
{
Console.WriteLine($"{this.name},{this.qty},{this.location}");
}
}
调用
static void Main(string[] args)
{
Material material = Material.Instance();//通过静方法创建类
material.Print();
}
这种方式未来我们会讲到单例应用时会细说。
静态构造函数
- 静态构造函数不使用访问修饰符或不具有参数。
- 类或结构只能有一个静态构造函数。
- 静态构造函数不能继承或重载。
- 静态构造函数不能直接调用,并且仅应由公共语言运行时 (CLR) 调用。 可以自动调用它们。
- 用户无法控制在程序中执行静态构造函数的时间。
用途
- 静态构造函数的一种典型用法是在类使用日志文件且将构造函数用于将条目写入到此文件中时使用。
- 静态构造函数对于创建非托管代码的包装类也非常有用,这种情况下构造函数可调用
LoadLibrary
方法。 - 也可在静态构造函数中轻松地对无法在编译时通过类型参数约束检查的类型参数强制执行运行时检查。
public class Material
{
static DateTime create_date;
/// <summary>
/// 静态构造函数
/// </summary>
static Material()
{
create_date = DateTime.Now;
}
private string name;//字段
//定义了一个Qty的属性
private int _qty = 0;
public int qty
{
get
{
return _qty;
}
set
{
if(value<0 || value > 100)
{
throw new ArgumentException("数据不在范围内!");
}
_qty = value;
}
}
//简单定义
public string location { get; set; }
public void Print()
{
Console.WriteLine($"{this.name},{this.qty},{this.location},{create_date}");
}
}
调用
static void Main(string[] args)
{
Material material =new Material();
material.Print();
}
终结器(以前称为析构函数)用于在垃圾回收器收集类实例时执行任何必要的最终清理操作。
- 无法在结构中定义终结器。 它们仅用于类。
- 一个类只能有一个终结器。
- 不能继承或重载终结器。
- 不能手动调用终结器。 可以自动调用它们。
- 终结器不使用修饰符或参数。
public class Material
{
public Material()
{
}
~Material()
{
Console.WriteLine("终结器");
}
}
- .NET Framework:输出显示当应用程序终止时,终结器将自动进行调用。
- .NET 5(包括 .NET Core)或更高版本:没有输出,因为在应用程序终止时,此 .NET 的实现不调用终结器。
网友评论