- Phương thức khởi tạo, cú pháp khai báo phương thức khởi tạo C#
- Sử dụng phương thức khởi tạo trong C#
- Phương thức khởi tạo của lớp cơ sở trong C#
- Phương thức khởi tạo riêng tư (private) C#
- Phương thức khởi tạo tĩnh (static) C#
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