当前位置: 首页 > article >正文

C# 编程基础:深入解析构造函数与析构函数

在C#中,构造函数和析构函数是特殊的成员函数,它们分别在对象创建和销毁时自动调用。

构造函数

构造函数是一个在创建对象时自动调用的特殊方法,用于初始化对象的状态。它可以有参数,也可以没有参数。一个类可以有一个或多个构造函数,这称为构造函数重载。

  1. 无参构造函数

    public class MyClass
    {
        public MyClass()
        {
            // 初始化代码
        }
    }
    
  2. 带参数的构造函数

    public class MyClass
    {
        private int value;
    
        public MyClass(int val)
        {
            value = val;
        }
    }
    
  3. 构造函数重载

    public class MyClass
    {
        private int value;
        private string text;
    
        public MyClass()
        {
            // 默认构造函数
        }
    
        public MyClass(int val)
        {
            value = val;
        }
    
        public MyClass(string txt)
        {
            text = txt;
        }
    
        public MyClass(int val, string txt)
        {
            value = val;
            text = txt;
        }
    }
    
  4. 静态构造函数

    静态构造函数用于初始化静态成员。它在类的任何静态成员被访问之前自动调用,并且只调用一次。静态构造函数不能带参数,也不能被显式调用。

    public class MyClass
    {
        private static int staticValue;
    
        static MyClass()
        {
            staticValue = 42; // 静态初始化代码
        }
    }
    
析构函数

析构函数是一个在对象被垃圾回收时自动调用的特殊方法,用于执行清理操作,如释放非托管资源。析构函数在对象的生命周期结束时被调用,并且不能被显式调用或重载。

  1. 析构函数的定义

    析构函数的名称与类名相同,但前面有一个波浪号(~)。

    public class MyClass
    {
        // 其他成员和方法...
    
        ~MyClass()
        {
            // 清理代码,如释放非托管资源
        }
    }
    
  2. 使用IDisposable接口进行资源管理

    虽然析构函数可以用于释放资源,但更好的做法是实现IDisposable接口,并在Dispose方法中释放资源。这允许在对象不再需要时立即释放资源,而不是等待垃圾回收器。

    public class MyClass : IDisposable
    {
        private bool disposed = false;
    
        // 其他成员和方法...
    
        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this); // 防止垃圾回收器再次调用析构函数
        }
    
        protected virtual void Dispose(bool disposing)
        {
            if (!disposed)
            {
                if (disposing)
                {
                    // 释放托管资源
                }
    
                // 释放非托管资源
    
                disposed = true;
            }
        }
    
        ~MyClass()
        {
            Dispose(false); // 析构函数中的清理代码
        }
    }
    

http://www.kler.cn/a/374355.html

相关文章:

  • akamai3.0 wizzair 网站 分析
  • linux ext4文件系统
  • 两分钟解决:vscode卡在设置SSH主机,VS Code-正在本地初始化VSCode服务器
  • 【c语言】简单的c程序设计
  • 联通光猫怎么自己改桥接模式?
  • 【CSS in Depth 2 精译_094】16.2:CSS 变换在动效中的应用(下)——导航菜单的文本标签“飞入”特效与交错渲染效果的实现
  • ClickHouse 5节点集群安装
  • node.js_npm : 无法加载文件 D:\Program Files\nodejs\npm.ps1
  • 深入了解 Three.js 中的材质与光照
  • 信捷 PLC C语言 简易绝对运动函数BMC_A_DRVA_BODY在POU FC中的使用
  • C++初阶教程——类与对象(中篇)
  • 2024年NSSCTF秋季招新赛-WEB
  • 算法笔记:Day-06(矩阵的顺时针遍历,特定顺序遍历,二维数组的变换)
  • 身份证人像照片验真 API 对接说明
  • Unity发布微信小程序-实战问题汇总
  • 数智驱动,纷享销客助力万东医疗实现精细化管理
  • ZYNQ AXI_Timer 中断
  • 从0学习React(9)
  • 100种算法【Python版】第32篇——Lucas-Lehmer测试
  • 【gRPC】什么是RPC——介绍一下RPC
  • HBM MM CDM HMM ESD TVS 浪涌
  • 【代码随想录Day54】图论Part06
  • 鸿蒙OS:中国智造的基石
  • w012基于springboot的社区团购系统设计
  • hadoop_yarn-site.xml
  • Chrome和夸克谁更护眼