1. Trang chủ
  2. » Thể loại khác

Tính đa hình trong C | 85 bài học lập trình C hay nhất PDF

6 138 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 6
Dung lượng 365,7 KB

Nội dung

http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Tính đa hình C# Từ polymorphism (tính đa hình) nghĩa có nhiều hình thái Trong lập trình hướng đối tượng, tính đa hình thường diễn đạt “một Interface, nhiều hàm” Tính đa hình C# static dynamic Trong đó, kiểu đa hình static gọi đa hình tĩnh kiểu đa hình dynamic gọi đa hình động Trong đa hình tĩnh, phần phản hồi tới hàm xác định compile time Trong với đa hình động, định runtime Đa hình static C# Kỹ thuật liên kết hàm với đối tượng thời gian biên dịch gọi Early Binding Nó gọi Static Binding C# cung cấp hai kỹ thuật để triển khai đa hình tĩnh Chúng là:  Nạp chồng hàm (Function overloading)  Nạp chồng toán tử (Operator overloading) Chúng ta bàn luận nạp chồng toán tử chương sau Nạp chồng hàm C# Bạn có nhiều định nghĩa cho tên hàm phạm vi Các định nghĩa hàm phải khác nhau: kiểu và/hoặc số tham số danh sách tham số Trong C#, bạn nạp chồng khai báo hàm mà khác kiểu trả Ví dụ sau minh họa cách sử dụng hàm print() để in kiểu liệu khác C#: using System; namespace PolymorphismApplication { class Printdata { void print(int i) { Console.WriteLine("Printing int: {0}", i ); } http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com void print(double f) { Console.WriteLine("Printing float: {0}" , f); } void print(string s) { Console.WriteLine("Printing string: {0}", s); } static void Main(string[] args) { Printdata p = new Printdata(); // Call print to print integer p.print(5); // Call print to print float p.print(500.263); // Call print to print string p.print("Hello C++"); Console.ReadKey(); } } } Khi code biên dịch thực thi, cho kết quả: Printing int: Printing float: 500.263 Printing string: Hello C++ http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Đa hình dynamic C# C# cho phép bạn tạo lớp abstract (trừu tượng) mà sử dụng để cung cấp trình triển khai cục lớp Interface Trình triển khai (Implementation) hoàn thành lớp kế thừa kế thừa từ Các lớp Abstract chứa phương thức abstract, mà triển khai lớp kế thừa Lớp kế thừa có tính chun dụng Dưới số qui tắc lớp abstract C#:  Bạn tạo Instance (sự thể hiện) lớp abstract  Bạn khai báo phương thức abstract bên lớp abstract  Khi lớp khai báo sealed, khơng thể kế thừa, lớp abstract khơng thể khai báo sealed Ví dụ sau minh họa lớp abstract C#: using System; namespace PolymorphismApplication { abstract class Shape { public abstract int area(); } class Rectangle: Shape { private int length; private int width; public Rectangle( int a=0, int b=0) { length = a; width = b; } public override int area () { Console.WriteLine("Rectangle class area :"); http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com return (width * length); } } class RectangleTester { static void Main(string[] args) { Rectangle r = new Rectangle(10, 7); double a = r.area(); Console.WriteLine("Area: {0}",a); Console.ReadKey(); } } } Khi code biên dịch thực thi, cho kết quả: Rectangle class area : Area: 70 Khi bạn có hàm định nghĩa lớp mà bạn muốn triển khai lớp kế thừa, bạn sử dụng hàm virtual C# Các hàm virtual triển khai cách khác lớp kế thừa khác việc gọi hàm định runtime Đa hình động C# triển khai lớp abstract hàm virtual Ví dụ sau minh họa điều này: using System; namespace PolymorphismApplication { class Shape { protected int width, height; public Shape( int a=0, int b=0) http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com { width = a; height = b; } public virtual int area() { Console.WriteLine("Parent class area :"); return 0; } } class Rectangle: Shape { public Rectangle( int a=0, int b=0): base(a, b) { } public override int area () { Console.WriteLine("Rectangle class area :"); return (width * height); } } class Triangle: Shape { public Triangle(int a = 0, int b = 0): base(a, b) { } public override int area() { Console.WriteLine("Triangle class area :"); return (width * height / 2); } http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com } class Caller { public void CallArea(Shape sh) { int a; a = sh.area(); Console.WriteLine("Area: {0}", a); } } class Tester { static void Main(string[] args) { Caller c = new Caller(); Rectangle r = new Rectangle(10, 7); Triangle t = new Triangle(10, 5); c.CallArea(r); c.CallArea(t); Console.ReadKey(); } } } Khi code biên dịch thực thi, cho kết quả: Rectangle class area: Area: 70 Triangle class area: Area: 25 http://vietjack.com/ Trang chia sẻ học online miễn phí Page ... http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Đa hình dynamic C# C# cho phép bạn tạo lớp abstract (trừu tượng) mà sử dụng để cung c p trình triển khai c c lớp Interface Trình triển... http://vietjack.com/ Trang chia sẻ h c online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com } class Caller { public void CallArea(Shape sh) { int a; a = sh.area(); Console.WriteLine("Area:... int area () { Console.WriteLine("Rectangle class area :"); http://vietjack.com/ Trang chia sẻ h c online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com return (width

Ngày đăng: 02/12/2017, 20:09

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN