1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Giáo trình phân tích quy trình nghiên cứu tạo ra những kiểu dữ liệu mới đa hình p5 pot

5 356 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 491,03 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Console.WriteLine“The value of 5 is {0}”,5.ToString;} } --- Kết quả: The value of i is: 5 The value of s is 7 The value of 5 is 5 ---Trong tài liệu của lớp Object phương thức ToString

Trang 1

() trả về một chuỗi thể hiện lớp hiện hành Sau đây là bảng tóm tắt các phương thức của lớp

Object

Equal( ) So sánh bằng nhau giữa hai đối tượng

GetHashCode( ) Cho phép những đối tượng cung cấp riêng

những hàm băm cho sử dụng tập hợp

GetType( ) Cung cấp kiểu của đối tượng

ToString( ) Cung cấp chuỗi thể hiện của đối tượng

Finalize( ) Dọn dẹp các tài nguyên

MemberwiseClone( ) Tạo một bản sao từ đối tượng

Bảng 5.1: Tóm tắt các phương thức của lớp Object.

Ví dụ 5.4 sau minh họa việc sử dụng phương thức ToString( ) thừa kế từ lớp Object

Ví dụ 5.4: Thừa kế từ Object.

-using System;

public class SomeClass

{

public SomeClass( int val )

{

value = val;

}

// phủ quyết phương thức ToString của lớp Object

public virtual string ToString()

{

return value.ToString();

}

// biến thành viên private lưu giá trị

private int value;

}

public class Tester

{

static void Main( )

{

int i = 5;

Console.WriteLine(“The value of i is: {0}”, i.ToString());

SomeClass s = new SomeClass(7);

Console.WriteLine(“The value of s is {0}”, s.ToString());

Trang 2

Console.WriteLine(“The value of 5 is {0}”,5.ToString());

}

}

- Kết quả:

The value of i is: 5

The value of s is 7

The value of 5 is 5

-Trong tài liệu của lớp Object phương thức ToString() được khai báo như sau:

public virtual string ToString();

Đây là phương thức ảo public, phương thức này trả về một chuỗi và không nhận tham số Tất

cả kiểu dữ liệu được xây dựng sẵn, như kiểu int, dẫn xuất từ lớp Object nên nó cũng có thể thực thi các phương thức của lớp Object

Lớp SomeClass trong ví dụ trên thực hiện việc phủ quyết phương thức ToString(), do đó phương thức này sẽ trả về giá trị có nghĩa Nếu chúng ta không phủ quyết phương thức

ToString() trong lớp SomeClass, phương thức của lớp cơ sở sẽ được thực thi, và kết quả xuất

ra sẽ có thay đổi như sau:

The value of s is SomeClass

Như chúng ta thấy, hành vi mặc định đã trả về một chuỗi chính là tên của lớp đang thể hiện Các lớp không cần phải khai báo tường minh việc dẫn xuất từ lớp Object, việc kế thừa sẽ được đưa vào một cách ngầm định Như lớp SomeClass trên ta không khai báo bất cứ dẫn xuất của lớp nào nhưng C# sẽ tự động đưa lớp Object thành lớp dẫn xuất Do đó ta mới có thể phủ quyết phương thức ToString() của lớp Object

Boxing và Unboxing dữ liệu

Boxing và unboxing là những xử lý cho phép kiểu dữ liệu giá trị (như int, long, ) được đối xử như kiểu dữ liệu tham chiếu (các đối tượng) Một giá trị được đưa vào bên trong của đối tượng, được gọi là Boxing Trường hợp ngược lại, Unboxing sẽ chuyển từ đối tượng ra một giá trị Xử lý này đã cho phép chúng ta gọi phương thức ToString( ) trên kiểu dữ liệu int

trong ví dụ 5.4

Boxing được thực hiện ngầm định

Boxing là một sự chuyển đổi ngầm định của một kiểu dữ liệu giá trị sang kiểu dữ liệu tham chiếu là đối tượng Boxing một giá trị bằng cách tạo ra một thể hiển của đối tượng cần

dùng và sao chép giá trị trên vào đối tượng mới tạo Ta có hình vẽ sau minh họa quá trình

Boxing một số nguyên

Trang 3

Hình 5.5: Boxing số nguyên.

Boxing được thực hiện ngầm định khi chúng ta đặt một kiểu giá trị vào một tham chiếu đang chờ đợi và giá trị sẽ được đưa vào đối tượng một cách tự động ngầm định Ví dụ, nếu chúng

ta gán một kiểu dư liệu cơ bản như kiểu nguyên int vào một biến kiểu Object (điều này hoàn toàn hợp lệ vì kiểu int được dẫn xuất từ lớp Object) thì giá trị này sẽ được đưa vào biến

Object, như minh họa sau:

using System;

class Boxing

{

public static void Main()

{

int i = 123;

Console.WriteLine(“The object value = {0}”, i);

}

}

Unboxing phải được thực hiện tường minh

Việc đưa một giá trị vào một đối tượng được thực hiện một cách ngầm định Và sự thực hiện ngược lại, unboxing, tức là đưa từ một đối tượng ra một giá trị phải được thực hiện một cách tường minh Chúng ta phải thiết lập theo hai bước sau:

Heap Stack

123 i

int i = 123;

o

object o=i;

i boxed

123

Trang 4

 Phải chắc chắn rằng đối tượng đã boxing đúng kiểu giá trị đưa ra.

 Sao chép giá trị từ thể hiện hay đối tượng vào biến kịểu giá trị

Hình 5.6: Unboxing sau khi thực hiện Boxing.

Để thực hiện unboxing thành công, thì đối tượng được unboxing phải được tham chiếu đến một đối tượng, và đối tượng này đã được tạo ra bằng việc boxing một giá trị cùng với kiểu của giá trị được đưa ra Boxing và Unboxing được minh họa trong ví dụ 5.5

Ví dụ 5.5: Boxing và Unboxing.

-using System;

public class UnboxingTest

{

public static void Main()

{

int i = 123;

// Boxing

object o = i;

// Unboxing phải được tường minh

int k = (int) o;

Console.WriteLine(“k: {0}”, k);

Heap Stack

123

int i = 123;

o

object o=i;

123 k

int k = (int)o;

123

i boxed

i

Trang 5

}

-Ví dụ 5.5 tạo một số nguyên i và thực hiện boxing ngầm định khi i được gán cho một đối tượng o Sau đó giá trị được unboxing một cách tường minh và gán đến một biến nguyên int

mới, và cuối cùng giá trị được hiển thị

Thông thường, chúng ta sẽ bao bọc các hoạt động unboxing trong khối try, sẽ được trình bày trong Chương 13 Nếu một đối tượng được Unboxing là null hay là tham chiếu đến một đối tượng có kiểu dữ liệu khác, một InvalidCastException sẽ được phát sinh

Các lớp lồng nhau

Các lớp chứa những thành viên, và những thành viên này có thể là một lớp khác có kiểu

do người dùng định nghĩa (user-defined type) Do vậy, một lớp Button có thể có một thành viên của kiểu Location, và kiểu Location này chứa thành viên của kiểu dữ liệu Point Cuối cùng, Point có thể chứa chứa thành viên của kiểu int

Cho đến lúc này, các lớp được tạo ra chỉ để dùng cho các lớp bên ngoài, và chức năng của các lớp đó như là lớp trợ giúp (helper class) Chúng ta có thể định nghĩa một lớp trợ giúp bên trong các lớp ngoài (outer class) Các lớp được định nghĩa bên trong gọi là các lớp lồng (nested class), và lớp chứa được gọi đơn giản là lớp ngoài

Những lớp lồng bên trong có lợi là có khả năng truy cập đến tất cả các thành viên của lớp ngoài Một phương thức của lớp lồng có thể truy cập đến biến thành viên private của lớp ngoài

Hơn nữa, lớp lồng bên trong có thể ẩn đối với tất cả các lớp khác, lớp lồng có thể là private

cho lớp ngoài

Cuối cùng, một lớp làm lồng bên trong là public và được truy cập bên trong phạm vi của lớp ngoài Nếu một lớp Outer là lớp ngoài, và lớp Nested là lớp public lồng bên trong lớp Outer, chúng ta có thể tham chiếu đến lớp Tested như Outer.Nested, khi đó lớp bên ngoài hành động ít nhiều giống như một namespace hay một phạm vi

Ghi chú: Đối với người lập trình Java, lớp lồng nhau trong C# thì giống như những lớp

nội static (static inner) trong Java Không có sự tương ứng trong C# với những lớp nội

nonstatic (nonstatic inner) trong Java

Ví dụ 5.6 sau sẽ thêm một lớp lồng vào lớp Fraction tên là FractionArtist Chức năng của lớp

FractionArtis là vẽ một phân số ra màn hình Trong ví dụ này, việc vẽ sẽ được thay thế bằng

sử dụng hàm WriteLine xuất ra màn hình console

Ví dụ 5.6: Sử dụng lớp lồng nhau.

-using System;

using System.Text;

Ngày đăng: 22/07/2014, 20:23

HÌNH ẢNH LIÊN QUAN

Bảng 5.1: Tóm tắt các phương thức của lớp Object. - Giáo trình phân tích quy trình nghiên cứu tạo ra những kiểu dữ liệu mới đa hình p5 pot
Bảng 5.1 Tóm tắt các phương thức của lớp Object (Trang 1)
Hình 5.5: Boxing số nguyên. - Giáo trình phân tích quy trình nghiên cứu tạo ra những kiểu dữ liệu mới đa hình p5 pot
Hình 5.5 Boxing số nguyên (Trang 3)
Hình 5.6: Unboxing sau khi thực hiện Boxing. - Giáo trình phân tích quy trình nghiên cứu tạo ra những kiểu dữ liệu mới đa hình p5 pot
Hình 5.6 Unboxing sau khi thực hiện Boxing (Trang 4)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm