DANH MỤC TÀI LIỆU
Tính đa hình trong C#
Tính đa hình trong C#
T polymorphism (tính đa hình) nghĩa là có nhi u hình thái. Trong l p trình
hưng đ i t ư ng, tính đa hình th ng đ c di n đ t nh là "m t Interface, ườ ượ ễ ạ ư
nhi u hàm".
Tính đa hình trong C# có th staticho c dynamic. Trong đó, ki u đa
hình static có th đ c g i là đa hình tĩnh, ph n h i t i m t hàm đ c xácể ượ ượ
đ nh t i th i đi m biên d ch và ki u đa hình dynamic có th đ c g i là ể ượ
đa hình đ ng, đ c xác đ nh trong th i gian ch y.ộ ượ
Đa hình static trong C#
K thu t liên k t m t hàm v i m t đ i t ng trong th i gian biên d ch ế ộ ớ ộ ượ
đ c g i là Early Binding. Nó cũng đ c g i là Static Binding. C# cung ượ ọ ượ ọ
c p hai k thu t đ tri n khai đa hình tĩnh, là: ậ ể
N p ch ng hàm (Function overloading)ạ ồ
N p ch ng toán t (Operator overloading)ạ ồ
Chúng ta có riêng m t bài bàn lu n v ậ ề n p ch ng toán t trong C#.ạ ồ
N p ch ng hàm trong C#ạ ồ
B n có th có nhi u đ nh nghĩa cho cùng tên hàm trong cùng m t ph m vi. ề ị
Các đ nh nghĩa này c a hàm ph i khác nhau: nh ki u và/ho c s l ng ư ố ượ
tham s trong danh sách tham s . Trong C#, b n không th n p ch ng các ể ạ
khai báo hàm mà ch khác nhau ki u tr v . ả ề
Ví d sau minh h a cách s d ng hàm ử ụ print() đ in các ki u d li u khác ữ ệ
nhau trong C#:
using System; namespace VdNapChong { class InDuLieu { void print(int i) {
Console.WriteLine("In s nguyên: {0}", i ); } void print(double f) {
Console.WriteLine("In s th p phân: {0}"ố ậ , f); } void print(string s) {
Console.WriteLine("In chu i: {0}", s); } static void Main(string[] args) {
InDuLieu p = new InDuLieu(); // G i hàm in s nguyên p.print(9); // G i
hàm in s th p phânố ậ p.print(501.263); // G i hàm in chu i p.print("H c C#
th t vui!"); Console.ReadKey(); } } }
N u đã đ c các bài C# tr c b n s bi t r ng, n u không s d ng ế ướ ế ế ử ụ
l nh Console.ReadKey(); thì ch ng trình s ch y và k t thúc luôn (quá ươ ẽ ạ ế
nhanh đ n n i b n không k p nhìn k t qu ). L nh này cho phép chúng ta ế ỗ ạ ế
nhìn k t qu m t cách rõ ràng h n.ế ả ộ ơ
Biên d ch và ch y ch ng trình C# trên s cho k t qu sau: ươ ế ả
In s nguyên: 9
In s th p phân: ố ậ 501.263
In chu i: H c C # th t vui!
Đa hình dynamic trong C#
C# cho phép b n t o các l p abstract (tr u t ng) mà đ c s d ng đ ượ ượ ử ụ
cung c p trình tri n khai c c b l p c a m t Interface. Trình tri n khai ộ ớ
(Implementation) đ c hoàn thành khi m t l p d n xu t k th a t nó. Cácượ ộ ớ ế
l p Abstract ch a các ph ng th c abstract đ c tri n khai b i l p d n ươ ượ ở ớ
xu t. L p d n xu t này có ch c năng chuyên bi t h n. ệ ơ
D i đây là m t s qui t c v các l p abstract trong C#:ướ ộ ố
B n không th t o m t Instance (s th hi n) c a m t l p abstract. ể ạ
B n không th khai báo m t ph ng th c abstract bên ngoài m t ộ ươ
l p abstract.
Khi m t l p đ c khai báo là kín (sealed), nó không th đ c d n ượ ể ượ
xu t, các l p abstract không th đ c khai báo là sealed. ể ượ
Ví d sau minh h a m t l p abstract trong C#: t o 3 l p có tên l n l t ộ ớ ượ
Shape, HinhChuNhat, TimDienTich nh sau:ư
using System; namespace VdLopAbstract {
// L p Shape là m t l p abstract ộ ớ abstract class Shape { public abstract int
area(); } // L p HinhChuNhat là l p d n xu t t l p Shape ừ ớ class
HinhChuNhat: Shape { private int dai; private int rong; public HinhChuNhat(
int a = 0, int b = 0) { dai = a; rong = b; } public override int area () {
Console.WriteLine("Tính di n tích hình ch nh t" ); return (dai * rong); } }
// L p TimDienTich ch a ph ng th c main() đ thao tác trên ứ ươ
HinhChuNhat class TimDienTich { static void Main(string[] args) {
HinhChuNhat r = new HinhChuNhat(10, 9); double a = r.area();
Console.WriteLine("Di n tích là: {0}",a); Console.ReadKey(); } } }
Biên d ch và ch y ch ng trình C# trên s cho k t qu sau: ươ ế ả
Tính di n tích hình ch nh t ữ ậ
Di n tích là: 90
Khi b n có m t hàm đ c đ nh nghĩa trong m t l p mà b n mu n đ c ượ ộ ớ ư
tri n khai m t l p đ c k th a, b n s d ng hàm virtual trong C#. Các ượ ế ử ụ
hàm virtual có th đ c tri n khai theo cách khác nhau trong l p đ c k ể ượ ượ ế
th a khác nhau và vi c g i nh ng hàm này s đ c quy t đ nh t i runtime. ẽ ượ ế
Đa hình đ ng trong C# đ c tri n khai b i các l p ượ abstract và các
hàm virtual.
Ví d sau minh h a đi u này: t o 5 l p có tên l n l t là nh sau ầ ượ ư
Hinh, HinhChuNhat, HinhTamGiac, HienThiDienTich và TimDienTich.
using System; namespace VdLopAbstract {
// L p Hinh là lop abstract. class Hinh { protected int dai, rong; public Hinh(
int a = 0, int b = 0) { dai = a; rong = b; } public virtual int area() {
Console.WriteLine("Di n tích c a l p cha là:" ủ ớ ); return 0; } }
// L p HinhChuNhat k th a t l p Hinh. ế ừ ớ class HinhChuNhat: Hinh {
public HinhChuNhat( int a = 0, int b = 0): base(a, b) { } public override int
area () { Console.WriteLine("Di n tích l p HinhChuNhat là:"ệ ớ ); return (dai *
rong); } }
// L p HinhTamGiac k th a t l p Hình ế ừ ớ class HinhTamGiac: Hinh {
public HinhTamGiac(int a = 0, int b = 0): base(a, b) { } public override int
area() { Console.WriteLine("Di n tích l p HinhTamGiac là:"ệ ớ ); return (dai *
rong / 2); } }
// In d li u di n tích ra màn hình. ữ ệ class HienThiDienTich { public void
CallArea(Hinh sh) { int a; a = sh.area(); Console.WriteLine("Di n tích: {0}",
a); } }
// TimDienTich ch a main() thao tác v i các đ i t ng. ố ượ class TimDienTich
{ static void Main(string[] args) { HienThiDienTich c = new
HienThiDienTich(); HinhChuNhat r = new HinhChuNhat(10, 7);
HinhTamGiac t = new HinhTamGiac(10, 5); c.CallArea(r); c.CallArea(t);
Console.ReadKey(); } } }
Biên d ch và ch y ch ng trình C# trên s cho k t qu sau: ươ ế ả
Di n tích l p HinhChuNhat là:
Di n tích: 70
Di n tích l p HinhTamGiac là:
Di n tích: 25
thông tin tài liệu
Từ polymorphism (tính đa hình) nghĩa là có nhiều hình thái. Trong lập trình hướng đối tượng, tính đa hình thường được diễn đạt như là "một Interface, nhiều hàm".
Mở rộng để xem thêm
từ khóa liên quan
xem nhiều trong tuần
yêu cầu tài liệu
Giúp bạn tìm tài liệu chưa có

LÝ THUYẾT TOÁN


×