Hướng dẫn và ví dụ C# Structure
1. Struct là gì?
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
2. Struct so với Class
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
3. Constructor của Struct
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.
4. Phương thức và thuộc tính 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;
}
}
}
Các hướng dẫn lập trình C#
- Thừa kế và đa hình trong C#
- Bắt đầu với C# cần những gì?
- Học nhanh C# cho người mới bắt đầu
- Cài đặt Visual Studio 2013 trên Windows
- Abstract class và Interface trong C#
- Cài đặt Visual Studio 2015 trên Windows
- Nén và giải nén trong C#
- Hướng dẫn lập trình đa luồng trong C#
- Hướng dẫn và ví dụ C# Delegate và Event
- Cài đặt AnkhSVN trên Windows
- Lập trình C# theo nhóm sử dụng Visual Studio và SVN
- Cài đặt .Net Framework
- Access Modifier trong C#
- Hướng dẫn và ví dụ C# String và StringBuilder
- Hướng dẫn và ví dụ C# Property
- Hướng dẫn và ví dụ C# Enum
- Hướng dẫn và ví dụ C# Structure
- Hướng dẫn và ví dụ C# Generics
- Hướng dẫn xử lý ngoại lệ trong C#
- Hướng dẫn và ví dụ Date Time trong C#
- Thao tác với tập tin và thư mục trong C#
- Hướng dẫn sử dụng Stream - luồng vào ra nhị phân trong C#
- Hướng dẫn sử dụng biểu thức chính quy trong C#
- Kết nối cơ sở dữ liệu SQL Server trong C#
- Làm việc với cơ sở dữ liệu SQL Server trong C#
- Kết nối cơ sở dữ liệu MySQL trong C#
- Làm việc với cơ sở dữ liệu MySQL trong C#
- Kết nối cơ sở dữ liệu Oracle trong C# không cần Oracle Client
- Làm việc với cơ sở dữ liệu Oracle trong C#
Show More