Tài liệu Cấu trúc phần cuối doc - Pdf 97

Tạo cấu trúc không gọi new

Bởi vì Location là một cấu trúc không phải là lớp, do đó các thể hiện của nó sẽ
được tạo trong stack. Trong ví dụ 7.1 khi toán tử new được gọi:
Location loc1 = new Location( 200, 300);
kết quả một đối tượng Location được tạo trên stack.
Tuy nhiên, toán tử new gọi bộ khởi dựng của lớp Location, không giống như với
một lớp, cấu trúc có thể được tạo ra mà không cần phải gọi toán tử
new. Điều này
giống như các biến của các kiểu dữ liệu được xây dựng sẵn (như int, long, char, )
được tạo ra. Ví dụ 7.2 sau minh họa việc tạo một cấu trúc không sử dụng toán tử
new.
Ghi chú: Đây là một sự khuyến cáo, trong ví dụ sau chúng ta minh họa cách tạo một
cấu trúc mà không phải sử dụng toán tử new bởi vì có sự khác nhau giữa C# và ngôn
ngữ C++ và sự khác nhau này chính là cách ngôn ngữ C# đối x
ử với những lớp khác
những cấu trúc. Tuy nhiên, việc tạo một cấu trúc mà không dùng từ khóa new sẽ không
có lợi và có thể tạo một chương trình khó hiểu, tiềm ẩn nhiều lỗi, và khó duy trì.
Chương trình họa sau sẽ không được khuyến khích.
Ví dụ 7.2: Tạo một cấu trúc mà không sử dụng new. using System;

public struct Location

{public Location( int xCoordinate, int yCoordinate) set

{ }

}

xVal = value;

public int y

{get

{ }

set


// biến thành viên lưu tọa độ x, y
public int xVal;
public int yVal;

}public class Tester

{static void Main()

{Location loc1;
loc1.xVal = 100;
loc1.yVal = 250;
Console.WriteLine(“loc1”);

}

}
Trong ví dụ 7.2 chúng ta khởi tạo biến thành viên một cách trực tiếp, trước khi gọi
Location loc1;

// gán cho biến thành viên
loc1.xVal = 100;
loc1.yVal = 250;

// sử dụng thuộc tính
loc1.x = 300;
loc1.y = 400;
Console.WriteLine( loc1
);
}Hãy cẩn thận với việc sử dụng các thuộc tính. Mặc dù cấu trúc cho phép chúng ta hỗ trợ
đóng
gói bằng việc thiết lập thuộc tính private cho các biến thành viên. Tuy nhiên bản
thân thuộc tính thật sự là phương thức thành viên,và chúng ta không thể gọi bất cứ
phương thức thành viên nào cho đến khi chúng ta khởi tạo tất cả các biến thành viên.
Như ví dụ trên ta thiết lập thuộc tính truy cập của hai biến thành viên xVal và yVal là
public
vì chúng ta phả
i khởi tạo giá trị của hai biến thành viên này bên ngoài của cấu trúc,
trước khi các thuộc tính được sử dụng.
Câu hỏi và trả lời

Câuhỏi
1: Có sự khác nhau giữa cấu trúc và lớp?

khai báo khóa ref cho các tham số kiểu cấu trúc. Và khi gọi phương thức thì thêm
từ khóa ref vào trước đối mục cấu trúc được truyền vào.
Câu hỏi thêm

Câu hỏi 1
: Chúng ta có thể khởi tạo giá trị ban đầu cho các biến thành viên của nó như
bên dưới được không? Nếu không được tại sao?
struct myStruct

{private int mNum = 100;
}Câuhỏi
2: Sự khác nhau giữa kiểu dữ liệu tham chiếu và kiểu dữ liệu giá trị?
Câuhỏi
3: Sự khác nhau giữa bộ khởi dựng của cấu trúc và bộ khởi dựng của lớp?
Câu hỏi 4
: Có nhất thiết phải dùng từ khóa new để tạo đối tượng kiểu cấu trúc hay
không? Nếu không thì còn cách nào khác nữa?
Câu hỏi 5
: Quá trình boxing và unboxing có diễn ra với một đối tượng là kiểu cấu trúc
hay không?
Bài tập


{public static void structtaker( TheStruct s)

{s.x = 5;

}public static void Main()

{TheStruct a = new TheStruct();

a.x = 1;

structtaker( a);
Console.WriteLine("a.x = {0}", a.x);
}

}
class TestClass

{public static void structtaker( TheStruct s)

{ s.x = 5;

}public static void classtaker(TheClass c)

{c.x = 5;

}public static void Main()


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