Tài liệu Cơ chế ủy quyền và sự kiện phần 2 - Pdf 97

[1]; thePair[1] = temp;
}

}// yêu cầu hai đối tượng đưa ra giá trị của nó public override string ToString()

{return thePair[0].ToString() + “, ”+ thePair[1].ToString();

}// mảng lưu 2 đối tượng

private object[] thePair = new object[2];

}//lớp đối tượng Cat
public class Cat

{return weight.ToString();

}// biến lưu trọng lượng
private int weight;
}

// khai báo lớp Student
public class Student
{public Student( string name)

{this.name = name;

}/
/ sắp theo thứ tự chữ cái

public class Test

{public static void Main()

{// tạo ra hai đối tượng Student và Cat

// đưa chúng vào hai đối tượng Pair Student
Thao = new Student(“Thao”); Student
Ba = new Student(“Ba”);
Cat Mun = new Cat(5); Cat
Ngao = new Cat(2);
Pair studentPair = new Pair(Thao, Ba); Pair
catPair = new Pair(Mun, Ngao);
Console.WriteLine(“Sinh vien \t\t\t: {0}”, studentPair.ToString());
Console.WriteLine(“Meo \t\t\t: {0}”, catPair.ToString());
// tạo ủy quyền

Pair.WhichIsFirst theStudentDelegate = new

Pair.WhichIsFirst( Student.WhichStudentComesFirst);
Pair.WhichIsFirst theCatDelegate = new
Pair.WhichIsFirst( Cat.WhichCatComesFirst);


Sau khi sap xep studentPair : Ba, Thao

Sau khi sap xep nguoc studentPair : Thao, Ba

Sau khi sap xep catPair : 2, 5

Sau khi sap xep nguoc catPair : 5, 2

Trong đoạn chương trình thử nghiệm trên chúng ta tạo ra hai đối tượng Student và
hai đối tượng Cat sau đó đưa chúng vào hai đối tượng chứa Pair theo từng loại. Bộ
khởi dựng của lớp Student lấy một chuỗi đại diện cho tên của sinh viên và bộ khởi
dựng của lớp Cat thì lấy một số int đại diện cho trọng lượng của mèo.

Student Thao = new Student(“Thao”);
Student Ba = new Student(“Ba”);
Cat Mun = new Cat(“5”);
Cat Ngao = new Cat(“2”);
Pair studentPair = new Pair(Thao, Ba);
Pair catPair = new Pair(Mun, Ngao);
Console.WriteLine(“Sinh vien \t\t\t: {0}”,
studentPair.ToString()); Console.WriteLine(“Meo \t\t\t: {0}”,
catPair.ToString());
Sau đó chương trình in nội dung chứa bên trong của hai đối tượng chứa Pair, và chúng
ta có
thể thấy thứ tự như sau:

Sinh vien : Thao, Ba

Meo : 5, 2

và Cat. Do vậy ta có thể bổ sung lớp Student bằng cách thêm vào:
public static readonly Pair.WhichIsFirst OrderStudents =

new Pair.WhichIsFirst(Student.WhichStudentComesFirst);
Ý nghĩa của lệnh trên là tạo một ủy quyền tĩnh tên là OrderStudents và có thuộc tính chỉ
đọc
readonly. Việc thêm vào thuộc tính readonly để ghi chú rằng một khi trường đã được
tạo ra
thì không được bổ sung sau đó.
Tương tự như vậy chúng ta có thể tạo ủy quyền tĩ
nh cho Cat như sau:

public static readonly Pair.WhichIsFirst OderCats =

new Pair.WhichIsFirst( Cat.WhichCatComesFirst);
Bây giờ thì đã có hai trường tĩnh hiện diện bên trong các lớp Student và Cat, mỗi cái sẽ
gắn
với phương thức tương ứng bên trong lớp. Sau đó chúng ta có thể thực hiện ủy
quyền mà không cần khai báo thể hiện ủy quyền cục bộ. Việc chuyển ủy quyền
được thực hiện trong lệnh in đậm như sau:
studentPair.Sort( theStudentDelegate);

Console.WriteLine(“Sau khi sap xep studentPair\t\t:{0}”, studentPair.ToString());

studentPair.ReverseSort(Student.OrderStudents);

Console.WriteLine(“Sau khi sap xep nguoc studentPair\t\t:{0}”,

studentPair.ToString());


{

return new Pair.WhichIsFirst( WhichStudentComesFirst);

}

}Tương tự như vậy chúng ta thực hiện thay thế với lớp Cat:

public static Pair.WhichIsFirst OderCats

{get

{

return new Pair.WhichIsFirst( WhichCatComesFirst);

}

}Khi truyền cho phương thức thì không thay
đổi: studentPair.Sort(
Student.OderStudents); catPair.Sort(


public class Image

{public Image()

{

Console.WriteLine(“An image created”);

}

}Chúng ta có thể tưởng tượng rằng việc xuất ra chuỗi như vậy tương ứng với việc tạo
một ảnh .gif hay .jpeg hay đại loại như vậy.
Sau đó lớp ImageProcessor khai báo một ủy quyền. Dĩ nhiên là chúng ta có thể định
nghĩa một ủy quyền riêng trả về bất cứ kiểu dữ liệu nào hay lấy bất cứ tham số nào
mà chúng ta muốn. Trong ví dụ này chúng ta định nghĩa m
ột ủy quyền có thể đóng
gói bất cứ phương thức không có giá trị trả về và cũng không nhận bất cứ tham số nào
hết:
public delegate void DoEffect();
Tiếp tục lớp ImageProcessor khai báo một sô phương thức, và từng phương thức này
phù hợp với ký pháp và kiểu trả về được khai báo bởi ủy quyền:
public static void Blur()


public static void Rotate()

{Console.WriteLine(“Rotating image”);

}Lớp ImageProcessor cần thiết có một mảng để lưu giữ các ủy quyền mà người sử dụng
chọn, một biến lưu giữ số hiệu ứng được chọn và dĩ nhiên là có một biến ảnh để xử lý:
DoEffect[]
arrayOfEffects; Image
image;
int numEffectsRegistered = 0;
ImageProcessor cũng cần một phương thức để thêm các ủy quyền vào trong mảng:

public void AddToEffects( DoEffect theEffect)

{if (numEffectsRegistered >=0)

{

throw new Exception(“Too many members in array”);

}

public DoEffect SharpenEffect = new DoEffect(Sharpen);

public DoEffect FilterEffect = new DoEffect(Filter);

public DoEffect RotateEffect = new DoEffect(Rotate);
Việc chọn các thao tác diễn ra trong quá trình tương tác ở thành phần giao diện
người sử dụng. Trong ví dụ này chúng ta mô phỏng bằng cách chọn các hiệu ứng,
thêm chúng vào trong mảng, và ProcessImage.
Ví dụ minh họa 11.2: Sử dụng mảng ủy quyền. namespace Programming_CSharp

{using System;

// khai báo lớp ảnh
public class Image
{public Image()

{

Console.WriteLine(“An image created”);

}


arrayOfEffects = new DoEffect[10];

}

// thêm hiệu ứng vào trong mảng

public void AddToEffects( DoEffect theEffect)

{if (numEffectsRegistered
>
=0) {

throw new Exception(“Too many members in array”);

}arrayOfEffects[numEffectsRegistered ++] = theEffect;

}


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status