Thứ Hai, ngày 19 tháng 4 năm 2010

// // Leave a Comment

Struct - Kiểu cấu trúc trong C#

      Struct (kiểu 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ỏ có thể dùng để thay thế cho lớp. Struct cũng tương tự như lớp, cũng chứa các phương thức (methods), những thuộc tính(properties), các trường(fields), các toán tử(operators), các kiểu dữ liệu lồng bên trong và bộ chỉ mục (indexer). Có một số sự khác nhau quan trọng giữa những lớp và cấu trúc. Ví dụ, cấu trúc thì không hỗ trợ kế thừa (Inheritance)và bộ hủy (Destructor)giống như kiểu lớp. Một điều quan trọng nhất là trong khi lớp là kiểu dữ liệu tham chiếu, thì cấu trúc là kiểu dữ lịêu giá trị . 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, hay một lớp nhỏ mà khi đặt vào trong stack thì có lợi hơn là đặt trong bộ nhớ heap. Như vậy,chúng ta chỉ nên sử dụng những cấu trúc chỉ với những 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.

Trong bài này chúng ta sẽ tìm hiểu cách định nghĩa và làm việc với kiểu cấu trúc và cách sử dụng Constructror để khởi tạo những giá trị của cấu trúc.

Định nghĩa một struct

Cú pháp để khai báo một struct 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 [: danh sách giao diện]
{
[thành viên của cấu trúc]
}

Ví dụ sau minh họa cách tạo một cấu trúc.

using System; 

public struct Location 
{

// thuộc tính private lưu toạ độ x, y 

private int xVal; 

private int yVal;  

public Location( int xCoordinate, int yCoordinate) 
{ 

xVal = xCoordinate; 
yVal = yCoordinate; 

} 

public int x 
{ 

get 
{ 

return xVal; 

} 

set 
{ 

xVal = value; 

} 

} 

public int y 
{ 

get 
{ 

return yVal; 

} 

set 
{  

yVal = value; 

} 

} 

public override string ToString() 
{ 

return (String.Format("{0}, {1}", xVal, yVal)); 

} 

} 

public class Tester 
{ 

public void myFunc( Location loc) 
{ 

loc.x = 50; 
loc.y = 100; 
Console.WriteLine("Loc1 location: {0}", loc); 

} 

static void Main() 
{ 

Location loc1 = new Location( 200, 300); 

Console.WriteLine("Loc1 location: {0}", loc1); 

Tester t = new Tester(); 

t.myFunc( loc1 ); 

Console.WriteLine("Loc1 location: {0}", loc1); 

} 

}

Những điểm khác nhau giữa Class và Struct
    Struct không hỗ trợ thừa kế. Struct được thừa kế từ lớp object nhưng không thể thừa kế từ các lớp khác hay các struct khác. Struct luôn được ngầm định là sealed, nghĩa là không có lớp hay struct nào có thể kế thừa nó. Tuy nhiên struct có thể thực thi nhiều giao diện như class.

Struct không có constructor và destructor mặc định.

Không cho phép khởi tạo các trường thể hiện ( instance fields) trong struct vì thế đoạn mã sau sẽ không hợp lệ:

private int xVal = 20; 

private int yVal = 50; 

Khởi tạo struct:

Chúng ta tạo một thể hiện của struct bằng cách 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. Như trong ví dụ, lớp Tester tạo một thể hiện của Location như sau:

Location loc1 = new Location( 200, 300); 

Ở đây một thể hiện mới tên là loc1 và nó được truyền hai giá trị là 200 và 300.
Struct là một kiểu giá trị và được lưu trữ trên stack. Chúng ta cũng có thể truyền struct vào hàm như các tham số khác.

0 comments: