7.4 C# 构造函数和析构函数


7.4.1 构造函数

在C#中,构造函数是一种特殊的方法,用于在创建对象时初始化对象。以下是构造函数的一些关键特性和规则:

  1. 构造函数的名称必须与类名完全相同:构造函数没有返回类型,甚至不使用 void

  2. 构造函数可以是公有的(public)、保护的(protected)或私有的(private)

    • public:可以用于任何地方的实例化。
    • protected:只能在同一个程序集(Assembly)中的子类中被调用。
    • private:只能在定义它的类内部被调用。
  3. 构造函数的主要目的是初始化对象:它通常不执行除了设置字段值以外的其他操作。

  4. 构造函数在创建类的新实例时自动调用:你不能显式调用一个构造函数(除了在声明时)。

  5. 如果没有显式声明构造函数,编译器会提供一个默认构造函数:这个默认构造函数是无参数的。

  6. 构造函数可以重载:一个类可以有多个构造函数,只要它们的参数列表不同。

public class Person 
{ 
    public string m_name; 
    protected int m_age; 
    protected bool m_gender; 

    // 默认构造函数
    public Person() 
    { 
        m_name = "Unknown"; 
        m_age = 0; 
        m_gender = false; 
    }
}
  • Person 类有一个默认构造函数,它将 m_name 初始化为 "Unknown"m_age 初始化为 0m_gender 初始化为 false
public class Xyz {
    // 成员变量
    int x;

    // 默认构造函数
    public Xyz() {		
        x = 0;			// 默认创建对象
    }

    // 带一个参数的构造函数
    public Xyz(int i) {		
        x = i;			// 使用参数创建对象
    }
}
  • Xyz 类有两个构造函数:
    • 一个无参数的默认构造函数,它将 x 初始化为 0
    • 一个带有一个整型参数的构造函数,它使用传入的参数值来初始化 x

构造函数重载允许你在创建对象时提供不同的初始化选项。例如,你可以创建一个 Xyz 对象而不提供任何参数,x 将默认为 0,或者你可以提供一个整数值来初始化 x

Xyz defaultXyz = new Xyz(); // x will be 0
Xyz specificXyz = new Xyz(5); // x will be 5

7.4.2 析构函数

在C#中,析构函数是一种特殊的方法,用于在对象的生命周期结束时进行清理工作。以下是析构函数的一些关键特性和规则:

  1. 析构函数不接受任何参数:它也没有返回值,甚至不使用 void

  2. 析构函数没有访问限制修饰符:它总是可以被访问。

  3. 析构函数的名称在类名前加一个波浪号(~):例如,如果类名为 Person,那么析构函数的名称就是 ~Person

  4. 析构函数的主要目的是销毁对象:它通常用于释放非托管资源,如文件句柄、数据库连接等。

  5. 析构函数不能被继承:每个类可以有自己的析构函数,但析构函数不会被派生类继承。

  6. 析构函数不能被显式调用:它们由垃圾回收器自动调用,当垃圾回收器确定对象不再被使用时。

以下是你提供的代码的解释:

public class Person 
{ 
    private string m_name; 
    private int m_age; 
    private bool m_gender; 

    // 析构函数
    ~Person() 
    { 
        // 在这里进行清理工作
    }
}
  • Person 类有一个析构函数 ~Person()。在这个析构函数中,你可以放置清理资源的代码。

析构函数通常用于释放非托管资源。在.NET中,大多数资源(如文件、网络连接等)都是托管的,这意味着它们由.NET的垃圾回收器自动管理。然而,有时你可能需要使用非托管资源,这时就需要在析构函数中进行清理。

以下是一个使用析构函数释放非托管资源的例子:

public class DatabaseConnection 
{ 
    private IntPtr nativeConnection; // 假设这是一个非托管资源

    public DatabaseConnection(string connectionString) 
    { 
        // 建立数据库连接
        nativeConnection = NativeMethods.CreateConnection(connectionString); 
    }

    // 析构函数
    ~DatabaseConnection() 
    { 
        // 清理非托管资源
        if (nativeConnection != IntPtr.Zero) 
        { 
            NativeMethods.CloseConnection(nativeConnection); 
        }
    }
}

在这个例子中,DatabaseConnection 类使用了一个非托管资源 nativeConnection。在析构函数中,我们检查 nativeConnection 是否已经被分配,并调用相应的清理函数。

注意事项

  • 析构函数的调用时机是不确定的:你不能依赖析构函数来执行重要的清理工作,因为垃圾回收器的调用时机是不可预测的。

  • 使用 IDisposable 接口:在.NET中,推荐使用 IDisposable 接口来管理资源的释放。通过实现 IDisposable 接口并提供一个 Dispose 方法,你可以确保资源被及时释放。

public class DatabaseConnection : IDisposable 
{ 
    private IntPtr nativeConnection; 

    public DatabaseConnection(string connectionString) 
    { 
        nativeConnection = NativeMethods.CreateConnection(connectionString); 
    }

    public void Dispose() 
    { 
        if (nativeConnection != IntPtr.Zero) 
        { 
            NativeMethods.CloseConnection(nativeConnection); 
            nativeConnection = IntPtr.Zero;
        }
    }

    // 析构函数
    ~DatabaseConnection() 
    { 
        Dispose();
    }
}

在这个改进的例子中,实现了 IDisposable 接口,并在析构函数中调用 Dispose 方法。这样,用户可以通过调用 Dispose 方法来显式释放资源,同时也可以通过垃圾回收器来隐式释放资源。

WinCC是西门子为工业自动化领域开发的一套SCADA软件,适用于各种不同的工业控制系统。WinCC7.4脚本函数是其中的一个重要特性,它可以让WinCC用户轻松地实现自定义功能和业务逻辑。下面详细介绍一下WinCC7.4脚本函数。 1、脚本函数是什么? 脚本函数是WinCC7.4软件中一种编写自定义功能和业务逻辑的方法。它是使用VBScript、JScript等脚本语言编写的小型程序,可以嵌入WinCC文本、按钮、报警、趋势图等图形对象中,并在运行时进行执行。WinCC7.4脚本函数提供了大量的API,用户可以根据自己的需求选择并调用API函数,实现定时器、报警处理、订单处理、数据写入等各种功能。 2、WinCC7.4脚本函数有哪些特点? (1)WinCC7.4脚本函数是一种灵活性很高的编程方式,用户可以在不修改WinCC系统源代码的情况下,自定义功能和业务逻辑,提高WinCC系统的可扩展性和可维护性。 (2)WinCC7.4脚本函数的编写非常简单,只需要熟悉VBScript、JScript等脚本语言的语法规则就可以了,不需要深入掌握复杂的面向对象编程技术。 (3)WinCC7.4脚本函数可以灵活运用于各种WinCC图形对象中,如文本、按钮、报警、趋势图等,实现不同的功能。 (4)WinCC7.4脚本函数可以与WinCC内置对象、COM对象、数据库等进行交互,实现数据的存取操作。同时,WinCC7.4脚本函数还可以与其他系统进行集成,如ERP、MES等系统。 3、WinCC7.4脚本函数如何使用? (1)首先,需要打开WinCC7.4软件,在项目窗口中选择需要添加脚本函数的对象,如文本、按钮、报警、趋势图等。 (2)在对象属性中找到Script Name标签,点击右侧的“…”按钮,进入脚本编辑界面。 (3)在脚本编辑界面中输入VBScript、JScript等脚本语言的代码,调用WinCC提供的API函数实现自定义功能和业务逻辑。 (4)完成脚本编写后,保存并退出编辑界面,然后进行编译和上传操作,即可在运行时实现自定义功能和业务逻辑。 总之,WinCC7.4脚本函数是WinCC系统中非常重要的特性,它可以让用户轻松地扩展和定制自己的WinCC系统,提高生产效率和质量。如果你是一位WinCC用户,不妨了解一下WinCC7.4脚本函数的使用方法,相信它会给你带来更多的惊喜和收获。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值