Hướng dẫn và ví dụ C# Structure
Xem thêm các chuyên mục:

Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất.
Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.


Trong C#, Struct (cấu trúc) là một kiểu giá trị đặc biệt, nó tạo ra một biến để lưu trữ nhiều giá trị riêng lẻ, mà các các trị này có liên quan tới nhau.
Ví dụ thông tin về một nhân viên bao gồm:
- Mã nhân viên
- Tên nhân viên
- Chức vụ
Bạn có thể tạo ra 3 biến để lưu trữ các thông tin trên của nhân viên. Tuy nhiên bạn có thể tạo ra một Struct để lưu trữ cả 3 thông tin trên trong một biến duy nhất.
C# sử dụng từ khóa struct để khai báo một Struct.
Employee.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpStructureTutorial
{
struct Employee
{
public string empNumber;
public string empName;
public string position;
public Employee(string empNumber, string empName, string position)
{
this.empNumber = empNumber;
this.empName = empName;
this.position = position;
}
}
}
Ví dụ sử dụng Struct:
EmployeeTest.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpStructureTutorial
{
class EmployeeTest
{
public static void Main(string[] args)
{
Employee john = new Employee("E01","John", "CLERK");
Console.WriteLine("Emp Number: " + john.empNumber);
Console.WriteLine("Emp Name: " + john.empName);
Console.WriteLine("Emp Position: " + john.position);
Console.Read();
}
}
}
Chạy ví dụ:
Emp Number: E01
Emp Name: John
Emp Position: CLECK
Struct thường được sử dụng để tạo ra một đối tượng để lưu trữ các giá trị, trong khi đó class được sử dụng đa dạng hơn.
- Struct không cho phép thừa kế, nó không thể mở rộng từ một class hoặc một struct nào.
- Struct không cho phép thực hiện (implements) Interface.
Một trong các struct hay được sử dụng trong C# đó là DateTime, nó mô tả ngày tháng và thời gian. Bạn có thể xem thêm về sử dụng ngày tháng và thời gian trong C# tại:
Nếu struct xuất hiện như một tham số trong một phương thức, nó được truyền dưới dạng giá trị. Trong khi đó nếu class xuất hiện như là một tham số trong một phương thức nó được truyền như một tham chiếu (refrence).

MyClass.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpStructureTutorial
{
class MyClass
{
public string name = "Abc";
public MyClass(string name)
{
this.name = name;
}
}
}
MyStruct.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpStructureTutorial
{
struct MyStruct
{
public string name;
public MyStruct(string name)
{
this.name = name;
}
}
}
MyTest.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpStructureTutorial
{
class MyTest
{
private static void passToMe(MyClass myClass, MyStruct myStruct)
{
// Thay đổi giá trị trường name.
myClass.name = "New Name";
// Thay đổi giá trị trường name.
myStruct.name = "New Name";
}
public static void Main(string[] args)
{
MyClass myClass = new MyClass("Abc");
MyStruct myStruct = new MyStruct("Abc");
Console.WriteLine("Before pass to method");
Console.WriteLine("myClass.name = " + myClass.name);// Abc
Console.WriteLine("myStruct.name = " + myStruct.name);// Abc
Console.WriteLine("Pass to method");
// 'myStruct' truyền vào phương thức là một bản copy.
// (Không phải là đối tượng gốc).
passToMe(myClass, myStruct);
Console.WriteLine("myClass.name = " + myClass.name); // New Name
Console.WriteLine("myStruct.name = " + myStruct.name);// Abc
Console.Read();
}
}
}
Chạy ví dụ:
Before pass to method
myClass.name = Abc
myStruct.name = Abc
Pass to method
myClass.name = New Name
myStruct.name = Abc
Struct có thể có các Constructor (Phương thức khởi tạo), nhưng không có Destructor (Phương thức hủy đối tượng).
Dưới đây là một số chú ý đối với Constructor:
- Bạn không thể viết một Constructor mặc định (Không có tham số) cho struct.
- Trong Constructor bạn phải gán các giá trị cho tất cả các trường của struct.

Struct có thể có các phương thức và thuộc tính (Property), và vì Struct không có thừa kế nên tất cả các phương thức, thuộc tính của nó không được phép trừu tượng (abstract).
Book.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpStructureTutorial
{
struct Book
{
private string title;
private string author;
// Property
public string Title
{
get
{
return this.title;
}
set
{
this.title = value;
}
}
// Property
public string Author
{
get
{
return this.author;
}
}
// Constructor.
public Book(string title, string author)
{
this.title = title;
this.author = author;
}
// Method.
public string GetInfo()
{
return "Book Title: " + this.title + ", Author: " + this.author;
}
}
}
Struct có thể có Indexer và Event, xem thêm về Indexer và Event tại: