1. Khái niệm về constructor và destructor
a.Constructor
Constructors (được gọi là hàm tạo) là những hàm đặc biệt cho phép thực thi, điều khiển chương trình
ngay khi khởi tạo đối tượng. Trong C#, Constructors có tên giống như tên
của Class và không có giá trị trả về.
Ví dụ:
class Library
{
private int ibooktypes;
//Constructor
public Library() // Hàm tạo không đối số.
{
ibooktypes
= 7;
}
public Library(int value)
{
ibooktypes
= value;
}
}
|
Ví dụ: Với dụ trên thì bạn có hai cách khởi tạo lớp Library thông qua một trong hai hàm tạo
- Library lb1 = new Library(); // Hàm tạo không đối số;
- Library lb2 = new Library(100); // Hàm tạo được truyền vào với giá trị là 100, và nó sẽ được gán vào ibooktypes = 100;
b.Destructor
Destructor (được gọi là hàm hủy) là một hàm dùng để hủy
đi một thể hiện của một class. Destructor không có đối số, không có từ
chỉ thuộc tính truy nhập, và không được gọi tường
minh. Destructor của một thể hiện sẽ được gọi tự động khi một thể hiện
kết thúc “vòng đời” của nó thông qua bộ thu dọn rác tự động (Garbage Collection). Destructor cũng có tên trùng với tên
class. Để khai báo một destructor chúng ta đặt dấu “~” vào trước
destructor
Ví
dụ
class Library
{
private int ibooktypes;
//Constructor
public Library()
{
ibooktypes
= 7;
}
public Library(int value)
{
ibooktypes = value;
}
//Destructor
~ Library()
{
//thực thi câu lệnh khi hàm hủy hay phương thức hủy được gọi
}
}
|
2. Instance constructor và Static constructor
Như
bài học trước tôi đã giới thiệu, Các thành phần trong class có thể là
instance và static. Constructors cũng là một thành phần của class, vậy
Instance constructors và Static constructors có gì khác nhau? Chúng ta
sẽ cùng tìm hiểu.
a. Instance constructor
Một instance constructor(
tạm dịch là một bộ khởi dựng thể hiện) sẽ khởi tạo một số giá trị khi
một thể hiện của một lớp được tạo ra.
Ví dụ:
class Point
{
public double x, y;
public Point()
{
this.x = 0;
this.y = 0;
}
public Point(double x, double
y)
{
this.x = x;
this.y = y;
}
public static double Distance(Point a, Point
b)
{
double xdiff = a.x – b.x;
double ydiff = a.y – b.y;
return Math.Sqrt(xdiff * xdiff + ydiff * ydiff);
}
public override string
ToString()
{
return string.Format("({0}, {1})",
x, y);
}
}
class Test
{
static void Main ()
{
Point a = new Point();
Point b = new Point(3, 4);
double d = Point.Distance(a, b);
Console.WriteLine("Distance from {0} to {1} is {2}", a, b,
d);
}
}
Trong lớp Point có 2
instance constructors. Một không có đối số truyền vào và 2 constructor
còn lại có 2 tham số kiểu double. Nếu class không có instance
constructor nào thì constructor không có đối số sẽ được gọi tự động.
b.Static constructor
Nếu một lớp khai báo một phương thức khởi tạo tĩnh (static
constructor), thì được đảm bảo rằng phương thức này sẽ được thực hiện
trước bất cứ thể hiện nào của lớp được tạo ra. Static Constructor hữu dụng khi chúng ta cần cài đặt một số công việc mà
không thể thực hiện được thông qua chức năng khởi dựng và công việc cài
đặt này chỉ được thực
duy nhất một lần. Static
constructor không có thuộc tính truy cập, không có đối số và không được
gọi tường minh mà sẽ được gọi tự động.
Ví dụ:
sing System;
using Personnel.Data;
class Employee
{
private static
DataSet ds;
static Employee() {
ds = new DataSet(...);
}
public string
Name;
public decimal
Salary;
...
}
Khi đó đối tượng ds sẽ
được tạo ra khi trước khi ta tạo một thể hiện lớp emplyee.
0 comments:
Đăng nhận xét