1. Có thể khai báo nhiều class trong 1 file .cs
Không nhất thiết mỗi file .cs là 1 class. Bạn có thể khai báo nhiều class trong 1 file cs trong trường hợp cần thiết.
namespace TestNSC { class Program { static void Main(string[] args) { Console.ReadLine(); } } public class ClassOne { } public class ClassTwo { } }
2. Partial class:
Partial class hiểu nôm na là những phân thân của class Name đó. Vd: bạn phân thân thành 2 người. Nhưng 2 người đó nó vẫn phản ánh chính là bạn. Partial class cực kỳ hữu hiệu trong trường hợp 2 Dev cùng code & dùng chung 1 class Name. Cách giải quyết là mỗi Dev tạo 1 partial class và Code trên đó.
Ngoài ra có 1 lưu ý nhỏ là tất cả các Parital class phải giống nhau Accessibility & Modifier & Name.
class Program { static void Main(string[] args) { ClassOne cls = new ClassOne(); cls.Dev1Function(); cls.Dev2Function(); Console.ReadLine(); } } public partial class ClassOne { // For Dev 1 coding public void Dev1Function() { } } public partial class ClassOne { // For Dev 2 coding public void Dev2Function() { } }
3. Kế thừa class:
Như chúng ta đã biết lập trình hướng đối tượng OOP thì kế thừa là 1 trong 4 thuộc tính quan trọng nhất. Do đó không thể nào bỏ qua mục này khi nói đến class được.
Q1: 1 Class có thể kế thừa được bao nhiêu Class?
Trả lời: Không giới hạn. Có thể Extend 1 class và Implement vô số Interface.
Q2: Cách viết kế thừa class như thế nào?
Trả lời:
Các lớp kế thừa sẽ đặt sau dấu “:”.
vd: Class derivedClass : baseClass, Iterface1, Interface2 { body }.
Trong đó derivedClass là lớp dẫn xuất. baseClass là Extend class và còn lại sẽ là Implement vô số Interface.
Một ví dụ về kế thừa:
//Base Class public class Father { public void FatherMethod() { Console.WriteLine("this property belong to Father"); } } //Derived class public class Child : Father { public void ChildMethod() { Console.WriteLine("this property belong to Child"); } } class Inheritance { //Entry point static void Main(string[] args) { Father fObj = new Father(); fObj.FatherMethod(); //Here Child object can access both class methods Child cObj = new Child(); cObj.FatherMethod(); cObj.ChildMethod(); } }
4. Abstract class:
C# cho phép cả 2 class và functions có thể được khai báo kiểu Abstract bằng cách sử dụng từ khóa abstract trước mỗi class hoặc function.
Một class Abstract không thể new Instance được.
Một Abstract function chỉ có Tên function và các parametter (thuật ngữ gọi là Signature) mà không có thân function. Nội dung trong thân function để cho các lớp con (Delivered class) tự định nghĩa.
Một class Abstract không chứa bất cứ cái gì có dính tới Static.
Khi có ít nhất 1 member là Abstract thì class đó bắt buộc phải chuyển thành Abstract.
Ở ví dụ dưới đây, mình khai báo 1 class Abstract là Employess với 1 method abstract là displayData(). Bạn hãy thử khai báo nội dung trong method này xem thử có lỗi ko nhé. Sau đó mình sẽ Implement cái method displayData() ở class con của nó (Lớp dẫn xuất – Delivered class). Chú ý rằng bạn phải dùng từ khóa override để định nghĩa lại nội dung của phương thức abstract displayData().
//abstract class public abstract class Employess { public abstract void getData(); } //derived class public class DerivedClass : Employess { //abstract class method implementation public override void getData() { Console.WriteLine("Abstract class method"); } } class abstractClass { static void Main(string[] args) { // class instance new DerivedClass().getData(); } }
5. Interface class:
Nếu như Abtract được xem là bản chất của 1 người. Thì Interface sẽ được xem như là biểu hiện cảm xúc hoặc là phong cách thời trang của người đó. Người đó có thể Vui hoặc buồn hoặc là có phong cách thời trang K-Pop, Âu-mỹ.
Một Interface class sẽ bắt đầu với từ khóa Interface khi khai báo class
Các phương thức trong Interface sẽ không có nội dung
Các lớp con dẫn xuất bắt buộc phải định nghĩa hết toàn bộ các phương thức đã khai báo ở Interface mà nó đã Implement.
Một interface chỉ có thể kế thừa từ một Interface.
Một interface không có constructor. Trong khi đó Abstract class lại có.
Một interface không có thuộc tính mà chỉ có phương thức. Trong khi đó Abstract class lại chứa cả 2.
// interface public interface xyz { void methodA(); void methodB(); } // interface method implementation class test : xyz { public void methodA() { Console.WriteLine("methodA"); } public void methodB() { Console.WriteLine("methodB"); } } class interfaceDemo { static void Main(string[] args) { test obj = new test(); obj.methodA(); obj.methodB(); } }
6. Sealed class:
Một Sealed class là một class đóng. Không thể nào kết thừa class đó nữa. Phục vụ cho mục đích bảo toàn code của bạn. Bạn vẫn có thể new Instance class đó.
sealed class SealedClass { void myfunv(); } public class test : SealedClass // Sai. Trình biên dịch sẽ báo lỗi Code { }
Nguồn : c-sharpcorner