析构函数
析构函数 (destructor)执行在类的实例被销毁之前需要的清理或释放非托管资源的行为。非托
管资源是指通过Win32API获得的文件句柄,或非托管内存块。使用.NET资源是无法得到它们的,
因此如果坚持使用.NET类,就不需要为类编写析构函数。
readonly修饰符
字段可以用readonly修饰符声明。其作用类似于将字段声明为const,一旦值被设定就不能
改变。
-
const字段只能在字段的声明语句中初始化,而readonly字段可以在下列任意位置设置它
的值。
- 字段声明语句,类似于const。
- 类的任何构造函数。如果是static字段,初始化必须在静态构造函数中完成。
-
const字段的值必须可在编译时决定,而readonly字段的值可以在运行时决定。这种自由
性允许你在不同的环境或不同的构造函数中设置不同的值!
-
const的行为总是静态的,而对于readonly字段以下两点是正确的。
- 它可以是实例字段,也可以是静态字段。
- 它在内存中有存储位置。
例如,下面的代码声明了一个名为Shape的类,它有两个readonly字段。
-
字段PI在它的声明中初始化。
-
字段Number0fSides根据调用的构造函数被设置为3或4。
csharp
class Shape
{
readonly double PI=3.1416
readonly int NumberOfSiders;
public Shape(double side1,double side2) //构造函数
{
//Shape 表示一个矩形
NumberOfSiders=4; //在构造函数中设定
...
}
public Shape(double side2,double side2,double side3) //构造函数
{
//Shape表示一个三角形
NumberOfSiders=3;
...//在构造函数中设定
}
}
this关键字
this关键字在类中使用,是对当前实例的引用。它只能被用在下列类成员的代码块中。
- 实例构造函数。
- 实例方法。
- 属性和索引器的实例访问器(索引器将在下一节阐述)。
很明显,因为静态成员不是实例的一部分,所以不能在任何静态函数成员的代码中使用this
关键字。更适当地说,this用于下列目的: - 用于区分类的成员和局部变量或参数;
- 作为调用方法的实参。
例如,下面的代码声明了类MyClass,它有一个int字段和一个方法,方法带有一个单独的
int参数。方法比较参数和字段的值并返回其中较大的值。唯一的问题是字段和形参的名称相同,
都是Var1。在方法内使用this关键字引用字段,以区分这两个名称。(此命名冲突仅用于演示的
目的,因此你不应对成员变量和参数使用相同的名称。)
csharp
class MyClass
{
int Var1=10;
public int ReturnMaxSum(int Var1)
{
return Var1>this.Var1
?Var1 //参数
:this.Var1; //字段
}
}
class Program
{
static void Main()
{
MyClass mc=new MyClass();
Console.WriteLine($"Max:{mc.ReturnMaxSum(30)}");
Console.WriteLine($"Max:{mc.ReturnMaxSum(5)}");
}
}
虽然理解this关键字的用途和功能很重要,但它实际上很少在代码中使用。