Dẫn nhập
Ở các bài học trước, bọn họ đã cùng nhau tìm hiểu về KẾ THỪA vào LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG . Lúc này chúng ta đã cùng tìm hiểu về Đa hình trong C#.
Nội dung
Để gọi hiểu bài xích này tốt nhất chúng ta nên có kiến thức và kỹ năng cơ phiên bản về những phần:
Trong bài học này, họ sẽ cùng mày mò các vấn đề:
Khái niệm tính nhiều hình.Từ khoá virtual và từ khoá override.Lớp trừu tượng và cách làm thuần ảo.Khái niệm tính đa hình
Tính đa hình là hiện tượng kỳ lạ các đối tượng thuộc các lớp khác nhau hoàn toàn có thể hiểu cùng 1 thông điệp theo các cách khác nhau.
Một ví dụ như về đa hình trong thực tế. Ta có 3 nhỏ vật: chó, mèo, lợn. Cả 3 loài vật này đa số là hễ vật. Nhưng mà khi ta bảo cả 3 động vật hoang dã kêu thì nhỏ chó đang kêu gâu gâu, nhỏ mèo đang kêu meo meo và bé heo vẫn kêu ẹt ẹt.
Trong lấy ví dụ như trên 3 con vật: chó, mèo, lợn xem như là các đối tượng. Việc ta bảo 3 động vật hoang dã kêu đó là thông điệp. Ví dụ cả 3 nhỏ vật hoàn toàn có thể hiểu cùng 1 thông điệp là kêu theo những cách không giống nhau.
Để diễn tả được tính đa hình:
Các lớp phải tất cả quan hệ kế thừa với cùng một lớp phụ thân nào đó.Phương thức đa hình cần được ghi đè (override) ở những lớp con (sẽ được trình bày ngay sau đây).Từ khoá virtual cùng từ khoá override
Virtual là từ khoá dùng để khai báo 1 cách thức ảo (phương thức ảo là phương thức có thể ghi đè được).
Override là từ khoá dùng để ghi lại phương thức ghi đè lên cách thức của lớp cha.
Lưu ý:
Chỉ có thể ghi đè lên thủ tục virtual hoặc abstract (sẽ trình diễn ngay sau đây).Tính đa hình chỉ được bộc lộ khi sẽ ghi đè lên cách tiến hành của lớp cha.Ví dụ minh hoạ:
Ta bao gồm 3 lớp Animal, Cat, Dog. Trong những số đó cát và Dog kề quá từ lớp Animal. Trong những lớp đều phải sở hữu phương thức Speak().
class Animal public void Speak() Console.WriteLine(" Animal is speaking. . ."); class mèo : Animal public void Speak() Console.WriteLine(" mèo is speaking. . ."); class Dog : Animal public void Speak() Console.WriteLine(" Dog is speaking. . ."); Ta gồm đoạn chương trình trong hàm main như nuốm này:
Animal cát = new Cat(); Animal dog = new Dog(); cat.Speak(); dog.Speak();Ta mong ước chương trình sẽ hotline đúng cách tiến hành Speak() của lớp đã được cấp phát vùng nhớ. Nhưng thực tế không phải vậy.
Lúc này ta rất cần được override cách làm Speak() của lớp phụ vương (lớp Animal) với để override được thì ta bắt buộc khai báo cách tiến hành Speak() của lớp thân phụ là cách thức ảo (virtual).
class Animal public virtual void Speak() Console.WriteLine(" Animal is speaking. . ."); class mèo : Animal public override void Speak() Console.WriteLine(" cát is speaking. . ."); class Dog : Animal public override void Speak() Console.WriteLine(" Dog is speaking. . ."); Chạy lại hàm main trên ta được:
Đây cũng chính là ví dụ thực hiện tính nhiều hình.
Ta thấy 2 đối tượng người dùng dog, cát được cấp phát 2 vùng nhớ trực thuộc 2 lớp 2 khác biệt nhưng khi cùng call phương thức Speak() thì đối tượng người sử dụng tham chiếu đến vùng lưu giữ của lớp nào sẽ tiến hành gọi đúng cách tiến hành của lớp đó.
Lớp trừu tượng và cách làm thuần ảo
Phương thức thuần ảo là một trong phương thức ảo và không tồn tại định nghĩa bên trong.
Lớp trừu tượng là lớp chứa cách thức thuần ảo.
Abstract là tự khoá dùng để làm khai báo 1 lớp trừu tượng hoặc 1 thủ tục thuần ảo.
Xét lại lấy một ví dụ trên, Ở trên đây ta coi lại cách tiến hành Speak() của lớp Animal ta nhận biết phần định nghĩa của cách làm này chỉ là hình thức sau đó cũng sẽ bị những lớp kế thừa ghi đè lên.
Việc khái niệm nội dung cách tiến hành không có tác dụng gì vậy vì sao ta lại buộc phải định nghĩa chúng?
Câu trả lời đã được C# câu trả lời qua từ khoá abstract. Ở trên đây ta áp dụng abstract để nhấn mạnh vấn đề 2 điều:
Phương thức Speak() hoàn toàn có thể ghi đè (override).Phương thức Speak() không có định nghĩa gì mặt trong.Để khai báo lớp trừu tượng và cách tiến hành thuần ảo ta chỉ cần thêm khoá abstract vào trước thương hiệu lớp và tên phương thức.
abstract class Animal /* Khai báo thủ tục thuần ảo phải không yêu cầu định nghĩa văn bản cho cách tiến hành */ public abstract void Speak(); Khi chạy chương trình những thứ vẫn ra đúng như ước ao muốn.
Lưu ý:
Khi thừa kế 1 lớp trừu tượng bạn cần phải override tất cả các thủ tục thuần ảo nhằm đảm bảo an toàn tính vừa lòng lệ mang đến chương trình.Kết luận
Nội dung bài xích này giúp chúng ta nắm được:
Khái niệm tính nhiều hình.Từ khoá virtual với từ khoá override.Lớp trừu tượng và cách thức thuần ảo.Bài sau bọn họ sẽ tò mò về INTERFACE trong LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG.
Cảm ơn chúng ta đã theo dõi bài xích viết. Hãy nhằm lại phản hồi hoặc góp ý của chính mình để vạc triển nội dung bài viết tốt hơn. Đừng quên “Luyện tập – thách thức – không lo ngại khó”.
Thảo luận
Nếu chúng ta có ngẫu nhiên khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt thắc mắc trong phần BÌNH LUẬN dưới hoặc trong mục HỎI và ĐÁP trên thư viện giasuviet.edu.vn.com để nhận ra sự cung ứng từ cùng đồng.