Một cấu trúc (struct) là một kiểu do người dùng định nghĩa, nó tương tự như lớp như nhẹ hơn lớp.
7.1 Định nghĩa cấu trúc Cú pháp Cú pháp
[thuộc tính] [kiểu truy cập] struct <định danh> [: <danh sách các giao diện >] {
// Các thành viên của cấu trúc }
Ví dụ 7-1 Minh họa cách khai báo và dùng một cấu trúc
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{ return yVal; } set{ yVal = value; } }
public override string ToString( ) {
return (String.Format("{0}, {1}", xVal,yVal)); }
private int xVal; private int yVal; }
public class Tester {
public void myFunc(Location loc) {
loc.x = 50; loc.y = 100;
Console.WriteLine("Loc1 location: {0}", loc); }
static void Main( ) {
Console.WriteLine("Loc1 location: {0}", loc1); Tester t = new Tester( );
t.myFunc(loc1);
Console.WriteLine("Loc1 location: {0}", loc1); } } Kết quả: Loc1 location: 200, 300 In MyFunc loc: 50, 100 Loc1 location: 200, 300 Không giống như lớp, cấu trúc không hỗ trợ kế thừa. Tất cả các cấu trúc thừa kế
ngầm định object nhưng nó không thể thừa kế từ bất kỳ lớp hay cấu trúc nào khác. Các cấu trúc cũng ngầm định là đã niêm phong. Tuy nhiên, nó có điểm giống với lớp là cho phép cài đặt đa giao diện.
Cấu trúc không có hủy tử cũng như không thểđặt các tham số tuỳ ý cho hàm dựng. Nếu ta không cài đặt bất kỳ hàm dựng nào thì cấu trúc được cung cấp hàm dựng mặc định, đặt giá trị 0 cho tất cả các biến thành viên.
Do cấu trúc được thiết kế cho nhẹ nhàng nên các biến thành viên đều là kiểu private và được gói gọn lại hết. Tuỳ từng tình huống và mục đích sử dụng mà ta cần cân nhắc chọn lựa dùng lớp hay cấu trúc.
7.2 Cách tạo cấu trúc
Muốn tạo một thể hiện của cấu trúc ta dùng từ khoá new. Ví dụ như:
Location loc1 = new Location(200,300); 7.2.1 Cấu trúc như các kiểu giá trị
Khi ta khai báo và tạo mới một cấu trúc như trên là ta đã gọi đến constructor của cấu trúc. Trong Ví dụ 7-1 trình biên dịch tự động đóng gói cấu trúc và nó được
đóng gói kiểu object thông qua WriteLine(). ToString()được gọi theo kỉểu của
object, bởi vì các cấu trúc thừa kế ngầm từ object, nên nó có khả năng đa hình, nạp chồng phương thức như bất kỳđối tượng nào khác.
Cấu trúc là object giá trị và khi nó qua một hàm, nó được thông qua như giá trị.
7.2.2 Gọi hàm dựng mặc định
Theo trên đã trình bày khi ta không tạo bất kỳ này thì khi tạo một thể hiện của cấu trúc thông qua từ khoá new nó sẽ gọi đến constructor mặc định của cấu trúc. Nội dung của constructor sẽđặt giá trị các biến về 0.
7.2.3 Tạo cấu trúc không dùng new
Bởi vì cấu trúc không phải là lớp, do đó, thể hiện của lớp được tạo trên stack. Cấu trúc cũng cho phép tạo mà không cần dùng từ khoá new, nhưng trong trường hợp này constructor không được gọi (cả mặc định lẫn người dùng định nghĩa).