31.C# 构造与析构函数

2024-03-05  本文已影响0人  技术老小子

摘要


在C#中,构造函数是一种特殊的方法,它用于创建类的实例并初始化其属性。构造函数的名称必须与类的名称相同,但不需要使用public、private或protected修饰符。在创建类对象时,调用构造函数将创建一个新的对象,并执行构造函数中定义的初始化逻辑。

在构造函数中,可以执行任何需要在对象创建时执行的操作,例如初始化对象的属性、创建数据库连接、加载数据等等。构造函数的语法类似于普通方法,但它们具有以下特点:

  1. 构造函数没有返回类型。
  2. 构造函数只能调用一次。
  3. 构造函数必须在对象创建时调用,即使对象不需要进行初始化。
  4. 如果类有多个构造函数,则在创建对象时,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();
}

这种方式未来我们会讲到单例应用时会细说。

静态构造函数

用途

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("终结器");
    }
}

上一篇 下一篇

猜你喜欢

热点阅读