CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 615

615

Chương 16: Các giao diện và mẫu thông dụng

Giao diện

ICloneable

nhận dạng một kiểu là khả-sao-chép và khai báo phương thức

Clone

một cơ chế mà thông qua đó, bạn có thể thu lấy bản sao của một đối tượng. Phương thức

Clone

không nhận đối số nào và trả về một

System.Object

, bất chấp kiểu đang hiện thực là gì.

Điều này nghĩa là một khi đã sao một đối tượng, bạn phải ép bản sao về đúng kiểu.
Cách hiện thực phương thức

Clone

cho một kiểu tùy biến tùy thuộc vào các thành viên dữ liệu

được khai báo bên trong kiểu. Nếu kiểu tùy biến chỉ chứa các thành viên dữ liệu kiểu giá trị
(

int

,

byte

...) và

System.String

, bạn có thể hiện thực phương thức

Clone

bằng cách tạo một

đối tượng mới và thiết lập các thành viên dữ liệu của nó có giá trị giống như đối tượng hiện
tại. Lớp

Object

(tất cả các kiểu đều dẫn xuất từ đây) chứa phương thức

MemberwiseClone

dùng

để tự động hóa quá trình này. Ví dụ dưới đây trình bày một lớp đơn giản có tên là

Employee

,

chỉ chứa các thành viên chuỗi. Do đó, phương thức

Clone

dựa vào phương thức thừa kế

MemberwiseClone

để tạo bản sao.

using System;

public class Employee : ICloneable {

public string Name;

public string Title;

// Phương thức khởi dựng đơn giản.

public Employee(string name, string title) {

Name = name;

Title = title;

}

// Tạo một bản sao bằng phương thức Object.MemberwiseClone

// vì lớp Employee chỉ chứa các tham chiếu chuỗi.

public object Clone() {

return MemberwiseClone();

}

}

Nếu kiểu tùy biến của bạn có chứa các thành viên dữ liệu kiểu tham chiếu, bạn phải quyết
định xem phương thức

Clone

của bạn sẽ thực hiện một bản sao cạn (shallow copy) hay một

bản sao sâu (deep copy). Bản sao cạn nghĩa là bất kỳ thành viên dữ liệu kiểu tham chiếu nào
trong bản sao đều sẽ chỉ đến đối tượng giống như thành viên dữ liệu kiểu tham chiếu tương
ứng trong đối tượng gốc. Bản sao sâu nghĩa là bạn phải sao toàn bộ đồ thị đối tượng (object
graph
) để các thành viên dữ liệu kiểu tham chiếu của bản sao chỉ đến các bản sao (độc lập về
mặt vật lý) của các đối tượng được tham chiếu bởi đối tượng gốc.

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.