C#中构造函数和析构函数区别
2024-10-20 07:41:57
把对象的初始化工作放在构造函数中,把清除工作放在析构函数中。当对象被创建时,构造函数被自动执行。当对象消亡时,析构函数被自动执行。这样就不用担心忘记对象的初始化和清除工作。
析构函数是由垃圾回收器控制的.
析构函数是由垃圾回收器控制的.把对象的初始化工作放在构造函数中,把清除工作放在析构函数中。当对象被创建时,构造函数被自动执行。当对象消亡时,析构函数被自动执行。这样就不用担心忘记对象的初始化和清除工作。一般不要定义析构函数,如果要释放非托管资源的话,就让该类继承IDisposable接口,实现Dispose模式。
using中的申明的对象确实可以释放,可以参考示例。
using System;
namespace ConsoleApplication7
{
/// <summary>
/// test 的摘要说明。
/// </summary>
public class Test:IDisposable
{
public Test(string name)
{
this.name = name;
}
private string name;
public string Name
{
get{return name;}
set{name = value;}
}
public static void Main()
{
Console.WriteLine("Programme Start!");
Test test1 = new Test("1");
using(test1)
{
}
using(Test test2 = new Test("2"), test3 = new Test("3"))
{
Test test4 = new Test("4");
}
Console.WriteLine("Programme Over!");
Console.ReadLine();
}
#region IDisposable 成员
public void Dispose()
{
Console.WriteLine("{0}正在释放资源",name);
}
#endregion
}
}
namespace ConsoleApplication7
{
/// <summary>
/// test 的摘要说明。
/// </summary>
public class Test:IDisposable
{
public Test(string name)
{
this.name = name;
}
private string name;
public string Name
{
get{return name;}
set{name = value;}
}
public static void Main()
{
Console.WriteLine("Programme Start!");
Test test1 = new Test("1");
using(test1)
{
}
using(Test test2 = new Test("2"), test3 = new Test("3"))
{
Test test4 = new Test("4");
}
Console.WriteLine("Programme Over!");
Console.ReadLine();
}
#region IDisposable 成员
public void Dispose()
{
Console.WriteLine("{0}正在释放资源",name);
}
#endregion
}
}
证明这个方法是可行的
最新文章
- python实现汉诺塔
- python常用数据类型内置方法介绍
- Qt属性表控件的使用 QtTreePropertyBrowser
- TRSWCM学习问题总结
- OpenJudge 2815 城堡问题 / Poj 1164 The Castle
- 读书笔记-《基于Oracle的SQL优化》-第一章-3
- string.Format()字符串格式化
- Ajax的基本请求/响应模型
- HTML5的三种存储方式以及区别
- iOS的相对路径和绝对路径
- 最大K段和题解
- Linux磁盘管理及LVM讲解
- 小程序问题集:保存失败:Error: ENOENT: no such file or directory, open
- python 接口自动化测试二(request.get)
- ASP.NET Core Identity 实战(2)——注册、登录、Claim
- Python 简单的远程执行命令
- Calendar add 方法 和set方法
- Mysql 模糊匹配(字符串str中是否包含子字符串substr)
- 【LeetCode】34. Search for a Range
- 二、StreamAPI
热门文章
- Deep Learning 32: 自己写的keras的一个callbacks函数,解决keras中不能在每个epoch实时显示学习速率learning rate的问题
- springboot 项目 docker化部署
- 为什么越来越多公链项目将WASM拥入怀中?
- iOS中键盘的收起
- 【POJ 2411】 Mondriaan&#39;s Dream
- 分析Android (build/core/*.mk脚本)
- AndroidStudio修改主题外观和字体大小
- 移动web开发-------meta
- web前端安全机制问题全解析
- Table View Programming Guide for iOS---(三)----Overview of the Table View API