C# Cơ bản .NET Core §1 Cài đặt, chương trình C# đầu tiên §2 Biến, kiểu dữ liệu và nhập/xuất §3 Toán tử số học và gán §4 So sánh, logic và lệnh if, switch §5 Vòng lặp for, while §6 Phương thức - Method §7 Phương thức - Delegate §8 Lớp - Class §9 Namespace §10 Partial, Nested §11 Kiểu giá trị, tham chiếu §12 Kiểu vô danh và dynamic §13 Biểu thức lambda §14 Event §15 Hàm hủy - Quá tải toán tử - thành viên tĩnh - indexer §16 null và nullable §17 Mảng §18 Chuỗi ký tự §19 Tính kế thừa §20 Phương thức khởi tạo §21 Tính đa hình - abstract - interface §22 Struct và Enum §23 Ngoại lệ Exeption §24 IDisposable - using §25 File cơ bản §26 FileStream §27 Generic §28 Collection - List §29 SortedList §30 Queue / Stack §31 Linkedlist §32 Dictionary - HashSet §33 Phương thức mở rộng §34 ObservableCollection §35 LINQ §36 (Multithreading) async - bất đồng bộ §37 Type §38 Attribute Annotation §39 DI Dependency Injection §40 (Multithreading) Parallel §41 Thư viện lớp §42 (Networking) HttpClient §43 (Networking) HttpMessageHandler §44 (Networking) HttpListener §45 (Networking) Tcp TcpListenerr/TcpClient §46 (ADO.NET) SqlConnection §47 (ADO.NET) SqlCommand §48 (EF Core) Tổng quan §49 (EF Core) Tạo Model §50 (EF Core) Fluent API §51 (EF Core) Query §52 (EF Core) Scaffold §53 (EF Core) Migration §54 (ASP.NET CORE) Hello World! §55 (ASP.NET CORE) Middleware §56 (ASP.NET CORE) Map - Request - Response §57 (ASP.NET CORE) IServiceCollection - MapWhen §58 (ASP.NET CORE) Session - ISession §59 (ASP.NET CORE) Configuration §60 (ASP.NET CORE) Gửi Mail §61 (ASP.NET RAZOR) Khởi tạo và Route §62 (ASP.NET RAZOR) Cú pháp Razor §63 (ASP.NET RAZOR) Layout trong ASP.NET Core §64 (ASP.NET RAZOR) Partial §65 (ASP.NET RAZOR) ViewComponent §66 (ASP.NET RAZOR) TagHelper §67 (ASP.NET RAZOR) PageModel §68 (ASP.NET RAZOR) Model Binding §69 (ASP.NET RAZOR) HTML Form, Validation §70 (ASP.NET RAZOR) Upload File §71 (ASP.NET RAZOR) HtmlHelper §72 (ASP.NET RAZOR) Entity Framework §73 (ASP.NET RAZOR) Paging §74 (ASP.NET RAZOR) Identity (1) - Register, Login, Logout §75 (ASP.NET RAZOR) Identity (2) Lockout, Reset Password §76 (ASP.NET RAZOR) Identity (3) Google Login §77 (ASP.NET RAZOR) Identity (4) Facebook Login §78 (ASP.NET RAZOR) Identity (5) profile, password, email ... §79 (ASP.NET RAZOR) Identity (6) Role §80 (ASP.NET RAZOR) Identity (7) Role-based Authorization §81 (ASP.NET RAZOR) Identity (8) RoleClaim §82 (ASP.NET RAZOR) Identity (9) Authorization Handler §83 (ASP.NET RAZOR) IAuthorizationService §84 (ASP.NET MVC) Controller - View §85 (ASP.NET MVC) MVC Route

Phương thức khởi tạo, cú pháp khai báo phương thức khởi tạo C#

Giới thiệu về khởi tạo (Constructor) lớp trong C#

Khi một đối tượng của lớp (class) hay cấu trúc (struc) được tạo, thì phương thức khởi tạo của lớp được gọi. Phương thức khởi tạo có tên cùng với tên lớp, có thể có nhiều phương thức khởi tạo nhưng mỗi phương thức có các tham số khác nhau. Phương thức khởi tạo là nơi bạn khởi tạo các giá trị dữ liệu nó giúp cho việc đọc code dễ hơn và sử dụng lớp một cách mềm dẻo hơn.

Nếu bạn không xây dựng phương thức khởi tạo nào cho lớp, C# sẽ tạo ra một phương thức khởi tạo ngầm định, nó thiết lập giá trị các thành viên dữ liệu nhận giá trị mặc định (tùy theo kiểu dữ liệu).

Về phần sử dụng phương thức khởi tạo đã giới thiệu tại: Phương thức khởi tạo, phần này trình bày hệ thống và kỹ hơn.

Cú pháp khai báo phương thức khởi tạo

Phương thức khởi tạo có tên giống tên lớp, không có kiểu trả về, hãy xem ví dụ sau:

class Product
{
    private string name;
    private decimal price;

    // Khai báo phương thức khởi tạo với 2 tham số
    public Product(string nameproduct, decimal priceproduct)
    {
        name = nameproduct;
        price = priceproduct;
    }

    // Khai báo phương thức khởi tạo không tham số
    public Product()
    {
        name = "Không tên";
        price = 0;
    }

    // Thuộc tính Name lấy hoặc thiết lập tên sản phẩm
    public string Name
    {
        set { name = value;}
        get { return name;}
    }
}

Bạn cũng lưu ý, trong lớp có các phương thức mà thực hiện một biểu thức đơn giản, thì bạn có thể gán ngay biểu thức vào tên phương thức bằng ký hiệu =>, kể cả setter và getter, ví dụ:

class Category
{
    private string categoryname;

    // Dùng thân biểu thức cho phương thức khởi tạo
    public Category(string nameofCategory) => categoryname = nameofCategory;
    public String Name
    {
        // Dùng thân biểu thức cho setter, getter
        set => categoryname = value;
        get => categoryname;
    }
}

Source code: CS009_Event (Git), hoặc tải cs009-event

Sử dụng phương thức khởi tạo trong C#

Khi tạo đối tượng của lớp bằng toán tử new thì nó sẽ tạo đối tượng và thi hành phương thức khởi tạo tương ứng phù hợp với tham số.

// Tạo đối tượng, không truyền tham số nên
// nó gọi phương thức khởi tạo không tham số
Product product1 = new Product();
Console.WriteLine(product1.Name); // Không tên

Product product2 = new Product("Laptop", 123);
Console.WriteLine(product2.Name); // Laptop

Phương thức khởi tạo của lớp cơ sở C#

Trong C# các lớp có tính kế thừa, một lớp có thể kế thừa lại các thuộc tính, phương thức từ lớp khác (lớp cơ sở), phần này nói ở Kế thừa lớp trong C#, lưu ý là nếu lớp cha (cơ sở) có xây dựng phương thức khởi tạo, thì cần chỉ định rõ gọi phương thức khởi tạo nào của lớp cơ sở (truyền tham số) khi phương thức khởi tạo lớp con thi hành. Thực hiện điều này bằng cách dùng từ khóa base ở khai báo tên phương thức như ví dụ sau:

class CategoryMobile : Category
{
  private string description;
    // Khi phương thức khởi tạo này được gọi, nó gọi phương thức khởi tạo có
    // một tham số của lớp cơ sở (Category) trước, rồi mới thi hành các code
    // trong thân của phương thức khởi tạo này
    public CategoryMobile(string nameofCategory, string mota) : base(nameofCategory)
    {
        description = mota;
    }

    public string Description
    {
        set => description = value;
        get => description;
    }

}

Khi sử dụng, chay đoạn code

CategoryMobile cat1 = new CategoryMobile("Điện thoại", "Danh mục các loại điện thoại");
Console.WriteLine(cat1.Name);
Console.WriteLine(cat1.Description);

// In ra
// Điện thoại
// Danh mục các loại điện thoại

Phương thức khởi tạo riêng tư C#

Khi xây dựng một số lớp đặc biệt, nhất là những lớp tiện ích chỉ chứa thành viên tĩnh, bạn mong muốn chỉ ra một cách tường minh lớp này không được phép tạo đối tượng, lớp này không được phép kế thừa thì hãy cho vào một phương thức khởi tạo không tham số và chỉ ra trạng thái truy cập là private, ví dụ:

class MyLib
{
  public static double PI = 3.14;

  private MyLib()
  {
  }
}

Lúc này nếu dùng lớp khởi tạo đối tượng thì sẽ lỗi

MyLib my1 = new MyLib(); // Lỗi

Kể cả dùng làm lớp cơ sở cũng lỗi

Phương thức khởi tạo tĩnh C#

Bạn có thể xây dựng một phương thức khởi tạo không tham số có chỉ thị truy cập là static, phương thức khởi tạo này dùng để khởi tạo các thành viên dữ liệu tĩnh, nó tự động gọi khi truy cập một thành viên dữ liệu tĩnh lần đầu. Ví dụ:

class MyColorCode
{
    public static string color_primary;
    public static string color_success;
    public static string color_danger;
    public static string color_warning;
    public static string color_info;

    // Phương thức khởi tạo tĩnh, được gọi khi lần đầu truy cập một thành viên tĩnh
    static MyColorCode()
    {
        Console.WriteLine("Static MyColorCode Contructor Call");
        color_danger = "Red";
        color_info = "Cyan";
        color_primary = "Navy";
        color_success = "Green";
        color_warning = "Yellow";
    }
}

Đoạn mã sử dụng kiểm tra:

Console.WriteLine(MyColorCode.color_danger);
Console.WriteLine(MyColorCode.color_info);

Kết quả là

Static MyColorCode Contructor Call
Red
Cyan

Source code: CS010_Constructors (Git), hoặc tải ex010

Đăng ký theo dõi ủng hộ kênh