Lập trình .NET và C#

Lecture 7: Structure- Cấu trúc TS Đào Nam Anh UTM, Khoa KH&CN

1

Resources

(cid:1) Các giải pháp lập trình C#, Nguyễn Ngọc Bình Phương - Thái Thanh Phong (cid:1) Allen Jones. C# Programmer's Cookbook. Microsoft Press, 2004 (cid:1)

John Connell. Coding Techniques for Microsoft Visual Basic .NET. Microsoft Press, 2002.

(cid:1) Harvey M. Deitel, Paul J. Deitel, & Tem R. Nieto. Visual Basic .NET How to

(cid:1)

(cid:1)

Program, Second Edition. Prentice Hall, 2002. Jose Mojica. C# and VB .NET Conversion Pocket Reference. O'Reilly, 2002. James Avery. Ten Must-Have Tools Every Developer Should Download Now. MSDN Magazine, 2004.

(cid:1) Karl Moore. The Ultimate VB.NET and ASP.NET Code Book. Apress, 2003 (cid:1) Matthew MacDonald. Microsoft Visual Basic .NET Programmer's Cookbook.

Microsoft Press, 2003.

(cid:1) Mark Schmidt & Simon Robinson. Microsoft Visual C# .NET 2003 Developer's

Cookbook. Sams Publishing, 2003.

(cid:1) Dương Quang Thiện. Lập trình Visual C# thế nào? Nhà xuất bản Tổng Hợp TP.

Hồ Chí Minh, 2005.

(cid:1) Nguyễn Ngọc Bình Phương & Lê Trần Nhật Quỳnh. Các giải pháp lập trình

Visual Basic .NET. Nhà xuất bản Giao thông Vận tải, 2006

(cid:1) www.msdn.microsoft.com, www.codeproject.com, www.msd2d.com,

www.developersdex.com, www.windowsforms.net, www.gotdotnet.com, www.codeguru.com, www.developerfusion.com

2

(cid:1) Định nghĩa cấu trúc (cid:1) Tạo cấu trúc

(cid:1) Cấu trúc là một kiểu giá trị (cid:1) Gọi bộ khởi dựng mặc định (cid:1) Tạo cấu trúc không gọi new

3

Định nghĩa cấu trúc

(cid:1) Cấu trúc là kiểu dữ liệu đơn giản do người dùng định nghĩa, kích thước nhỏ dùng để thay thế cho lớp.

(cid:1) Tương tự như lớp, cấu trúc cũng chứa các

4

phương thức, những thuộc tính, các trường, các toán tử, các kiểu dữ liệu lồng bên trong và bộ chỉ mục (indexer).

Định nghĩa cấu trúc

Có một số sự khác nhau quan trọng giữa

(cid:1) Cấu trúc thì không hỗ trợ kế thừa và bộ hủy

những lớp và cấu trúc.

(cid:1) Trong khi lớp là kiểu dữ liệu tham chiếu, thì

giống như kiểu lớp.

(cid:1) Do đó cấu trúc thường dùng để thể hiển các đối tượng không đòi hỏi một ngữ nghĩa tham chiếu

5

cấu trúc là kiểu dữ liệu giá trị

Định nghĩa cấu trúc

(cid:1) nên sử dụng những cấu trúc chỉ với những

6

kiểu dữ liệu nhỏ, và những hành vi hay thuộc tính của nó giống như các kiểu dữ liệu được xây dựng sẵn.

Định nghĩa cấu trúc

Cú pháp để khai báo một cấu trúc cũng tương

tự như cách khai báo một lớp:

[thuộc tính] [bổ sung truy cập] struct

trúc> [: danh sách giao diện]

{

[thành viên của cấu trúc]

7

}

using System; public struct Location {

public Location( int xCoordinate, int yCoordinate) {

xVal = xCoordinate; yVal = yCoordinate;

} public int x {

get {

return xVal;

} set {

xVal = value;

}

} public int y {

get {

8

return yVal;

} set

Định nghĩa cấu trúc

(cid:1) Cấu trúc không hỗ trợ việc thừa kế. Chúng được thừa kế ngầm định từ lớp object () nhưng không thể kế thừa từ các lớp khác hay cấu trúc khác.

(cid:1) Cấu trúc cũng được ngầm định là sealed,

điều này có ý nghĩa là không có lớp nào hay bất cứ cấu trúc nào có thể dẫn xuất từ nó. (cid:1) Tuy nhiên, cũng giống như các lớp, cấu trúc

9

có thể thực thi nhiều giao diện.

(cid:1) cấu trúc không có bộ hủy và cũng không có bộ khởi tạo mặc định không tham số tùy chọn.

(cid:1) Nếu không cung cấp bộ khởi tạo nào thì cấu trúc sẽ được cung cấp một bộ khởi tạo mặc định, khi đó giá trị 0 sẽ được thiết lập cho tất cả các dữ liệu thành viên

10

(cid:1) Không cho phép khởi tạo: không thể khởi tạo các trường thể hiện (instance fields) trong cấu trúc, do đó đoạn mã nguồn sau sẽ không hợp lệ: (cid:1) private int xVal = 20; (cid:1) private int yVal = 50;

(cid:1) mặc dù điều này thực hiện tốt đối với lớp.

11

Tạo cấu trúc

(cid:1) Tạo cấu trúc

(cid:1) Cấu trúc là một kiểu giá trị (cid:1) Gọi bộ khởi dựng mặc định (cid:1) Tạo cấu trúc không gọi new

12

Tạo cấu trúc

sử dụng từ khóa new trong câu lệnh gán, như

khi chúng ta tạo một đối tượng của lớp.

13

Location loc1 = new Location( 200, 300);

Tạo cấu trúc

Không sử dụng từ khóa new

14

Location loc1; loc1.xVal = 100; loc1.yVal = 250;

Question

15