C#中的构造函数和析构函数的区别与应用

1、C#中的构造函数:
类的 构造函数 是类的一个特殊的成员函数,当创建类的新对象时执行。
构造函数的名称与类的名称完全相同,它没有任何返回类型。
下面的实例说明了构造函数的概念:
代码实例:

using System;
namespace LineApplication
{
   class Line
   {
      private double length;   // 线条的长度
      public Line()
      {
         Console.WriteLine("对象已创建");
      }

      public void setLength( double len )
      {
         length = len;
      }
      public double getLength()
      {
         return length;
      }

      static void Main(string[] args)
      {
         Line line = new Line();    
         // 设置线条长度
         line.setLength(6.0);
         Console.WriteLine("线条的长度: {0}", line.getLength());
         Console.ReadKey();
      }
   }
}
当上面的代码被编译和执行时,它会产生下列结果:
对象已创建
线条的长度: 6

默认的构造函数没有任何参数。但是如果你需要一个带有参数的构造函数可以有参数,这种构造函数叫做参数化构造函数。这种技术可以帮助你在创建对象的同时给对象赋初始值,具体请看下面实例:
代码实例:

using System;
namespace LineApplication
{
   class Line
   {
      private double length;   // 线条的长度
      public Line(double len)  // 参数化构造函数
      {
         Console.WriteLine("对象已创建,length = {0}", len);
         length = len;
      }

      public void setLength( double len )
      {
         length = len;
      }
      public double getLength()
      {
         return length;
      }

      static void Main(string[] args)
      {
         Line line = new Line(10.0);
         Console.WriteLine("线条的长度: {0}", line.getLength());
         // 设置线条长度
         line.setLength(6.0);
         Console.WriteLine("线条的长度: {0}", line.getLength());
         Console.ReadKey();
      }
   }
}
当上面的代码被编译和执行时,它会产生下列结果:
对象已创建,length = 10
线条的长度: 10
线条的长度: 6

2、C#中的析构函数:
类的 析构函数 是类的一个特殊的成员函数,当类的对象超出范围时执行。
析构函数的名称是在类的名称前加上一个波浪形(~)作为前缀,它不返回值,也不带任何参数。
析构函数用于在结束程序(比如关闭文件、释放内存等)之前释放资源。析构函数不能继承或重载。
下面的实例说明了析构函数的概念:
代码实例:

using System;
namespace LineApplication
{
   class Line
   {
      private double length;   // 线条的长度
      public Line()  // 构造函数
      {
         Console.WriteLine("对象已创建");
      }
      ~Line() //析构函数
      {
         Console.WriteLine("对象已删除");
      }

      public void setLength( double len )
      {
         length = len;
      }
      public double getLength()
      {
         return length;
      }

      static void Main(string[] args)
      {
         Line line = new Line();
         // 设置线条长度
         line.setLength(6.0);
         Console.WriteLine("线条的长度: {0}", line.getLength());          
      }
   }
}
当上面的代码被编译和执行时,它会产生下列结果:
对象已创建
线条的长度: 6
对象已删除
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
构造函数(Constructor)是一种特殊的成员函数,它主要用于为对象分配存储空间,并对数据成员进行初始化,即对类进行初始化。构造函数的特点包括: 1. 构造函数的名字必须与类同名。 2. 构造函数没有返回类型,可以带参数,也可以不带参数。 3. 在声明类对象时,系统会自动调用构造函数构造函数不能被显式调用。 4. 构造函数可以重载,从而提供初始化类对象的不同方式。 5. 如果在声明时未定义构造函数,系统会自动生成默认的构造函数,此时构造函数的函数体为空。 构造函数分为实例构造函数、私有构造函数和静态构造函数: 1. 实例构造函数是实现对类实例进行初始化的方法成员。 示例: ```csharp public class Cat { int i = 4; public Cat() { Console.WriteLine("The cat: " + i); } static void Main(string[] args) { Cat cat = new Cat(); Console.ReadLine(); } } ``` 2. 私有构造函数是一种特殊的实例构造函数,通常用在只包含静态成员的类。如果类具有一个或多个私有构造函数而没有公共构造函数,则其他类无法创建该类的实例。 示例: ```csharp public class Dog { private Dog() { Console.WriteLine("this is dog"); } } public class Cat { int i = 4; private Cat() { Console.WriteLine("The cat: " + i); } static void Main(string[] args) { Dog dog1 = new Dog(); // 不可访问,受保护级别限制而无法实例化 Cat cat1 = new Cat(); Console.ReadLine(); } } ``` 3. 静态构造函数是实现对一个类进行初始化的方法成员,一般用于对静态数据的初始化。静态构造函数不能有参数,不能有修饰符,也不能被调用,当类被加载时,类的静态构造函数会自动被调用。 示例: ```csharp public class Dog { static int i = 1; static Dog() { Console.WriteLine("the dog 默认构造函数 i=" + i); } } public class Cat { static void Main(string[] args) { Dog dog1 = new Dog(); Console.ReadLine(); } } ``` 析构函数(Destructor)在C#没有与之对应的关键字,与构造函数相反,析构函数用于释放对象占用的资源。当对象被销毁时,析构函数会自动被调用。析构函数的特点包括: 1. 析构函数的名字与类名相同,但在类名前加上一个波浪线(~)以表示它是一个析构函数。 2. 析构函数没有参数,没有返回值,也不能重载。 3. 析构函数不能被显式调用,对象销毁时会自动调用析构函数。 4. 如果一个类没有定义析构函数,系统会自动生成一个默认的析构函数,其函数体为空。 回答完问题后,我还有几个

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值