- Partial Class
- Một số lưu ý khi dùng Partial
- Partial Method - chia mã nguồn hàm
- Lớp lồng vào nhau (kiểu lồng nhau)
Phân chia mã nguồn lớp (class, interface) ra thành nhiều file với Partial
Partial là kỹ thuật phân chia code lưu ở nhiều file mã nguồn khác nhau,
khi biên dịch thì nó tổng hợp lại thành một. Kỹ thuật này dùng với từ khóa partial
khi định nghĩa lớp, giao diện, struct.
Kỹ thuật phân chia code ra thành nhiều file bạn có thể gặp khi:
- Dự án lớn, những lớp mà mã nguồn dài cần chia tách ra thành nhiều file có thể đơn giản là gộp các chức năng giống nhau thành một file, hoặc làm việc nhóm mỗi lập trình viên làm việc trên một file - sau đó khi biên dịch nó tự tổng hợp thành một class hoàn chỉnh
- Khi làm việc với các IDE, nó có thể phát sinh code một cách tự động, code được thêm vào lớp được lưu ở một file mã nguồn khác mà không cần chỉnh sửa file code ban đầu (nếu lập trình C# WPF bạn nhận thấy IDE phát sinh nhiều thành phần giao diện ở dạng này)
Để phân chia lớp, bạn khai báo và định nghĩa các thành phần của lớp ở nhiều
nơi khác nhau, với yêu cầu trong khai báo lớp cho thêm từ khóa partial
,
ví dụ một lớp có tên Product
khai báo một cách thông thường như sau:
using System; namespace CS007B_PARTIAL { public class Product { public string Name { set; get;} public bool Order(int number = 0) { return true; } public int numberBrought() { return 100; } } }
Giờ có thể tách định nghĩa lớp trên ra làm hai phần, một phần định nghĩa
trong file Product1.cs
và một phần trong Product2.cs
,
kết quả vẫn có lớp Product tương đương
Product1.cs
using System; namespace CS007B_PARTIAL { public partial class Product { public string Name { set; get;} public bool Order(int number = 0) { return true; } } }
Product2.cs
using System; namespace CS007B_PARTIAL { public partial class Product { public int numberBrought() { return 100; } } }
Bạn thấy lớp đã được định nghĩa ở hai nơi, yêu cầu dòng khai báo lớp
ở cả hai nơi là có từ khóa partial
, đồng thời cùng có khả năng truy cập
giống nhau, như trên khai báo
Lưu ý khi dùng partial
Có một số quy tắc cần lưu ý khi bạn để code của một thành phần ở nhiều nơi với partial
Trong định nghĩa ở tất cả các phần phải có từ khóa partial
, ví dụ sau là lỗi
public partial class A { } public class A { } // thiếu đánh dấu partial
Từ khóa partial
có thể đặt ngay trước từ khóa class
Partial với các phương thức
Bạn cũng có thể dùng từ khóa partial
trong khai báo các phương thức,
tuy nhiên mục đích chỉ là chia chia làm hai nơi, một nơi như là khai báo một
nơi là triển khai code, và phương thức phải trả về kiểu void. Ví dụ:
// file1.cs partial void myMethod(); // file2.cs partial void myMethod() { // code triển khai }
Partial Method thường sinh ra bởi việc sinh mã nguồn tự động khi dùng công cụ IDE
Lớp lồng nhau (kiểu Nested) trong C#
Trong C# nó cho phép bạn khai báo một lớp (class), giao diện (interface), cấu trúc (struct) trong thân một lớp khác - chúng được gọi là kiểu lồng nhau (Nested Type)
Ví dụ khai báo một lớp con trong một lớp khác
public class Container { public class Nested { public Nested() { } } }
Lớp Nested
được khai báo, định nghĩa trong lớp Container
,
nếu phạm vị lớp public, thì bên ngoài sử dụng lớp con này bằng cách chỉ rõ
Container.Nested
Container.Nested nested = new Container.Nested();
Ví dụ lớp lồng nhau
class MobileProduct { public Manufactory manufactory { set; get; } // Lớp Manufactory nằm trong MobileProduct public class Manufactory { string address; public Manufactory (string address) { this.address = address; } public void ShowAddress () { Console.WriteLine (address); } } public void ProductInfo () { manufactory.ShowAddress (); } }
Sử dụng:
MobileProduct product = new MobileProduct(); product.manufactory = new MobileProduct.Manufactory("Abc ..."); product.ProductInfo();
Mã nguồn CS007B_PARTIAL, hoặc tải về tại ex007b