Bài 5: Kế thừa – Đa hình
lượt xem 38
download
Mục tiêu của bài: Nhằm trang bị cho người học: Kiến thức và kỹ năng về tính thừa kế. Kiến thức và kỹ năng về tính đa hình. Các kiến thức về lớp trừu tượng. Kiến thức và kỹ năng về các phương thức, các thành phần static. Kiến thức và kỹ năng về tham số và các phương thức nạp chồng. Kiến thức và kỹ năng về thuộc tính.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài 5: Kế thừa – Đa hình
- Bài 5. Kế thừa – Đa hình Mục tiêu của bài: Nhằm trang bị cho người học: Kiến thức và kỹ năng về tính thừa kế. Kiến thức và kỹ năng về tính đa hình. Các kiến thức về lớp trừu tượng. Kiến thức và kỹ năng về các phương thức, các thành phần static. Kiến thức và kỹ năng về tham số và các phương thức nạp chồng. Kiến thức và kỹ năng về thuộc tính.
- 1. Sự kế thừa Một trong những ưu điểm nổi bật của lập trình hướng đối tượng đó là thừa kế, đó là sự sử dụng lại những thuộc tính và hành vi của một lớp. Có hai kiểu kế thừa trong lập trình, đơn kế thừa và đa kế thừa. C# cung cấp mô hình đơn kế thừa. Thực hiện kế thừa Trong C#, khi ta tạo một lớp kế thừa bằng cách công một thêm dấu “:” và sau tên của lớp kế thừa và theo sau đó là lớp cơ sở như sau: public class ListBox : Window có nghĩa là ta khai báo một lớp mới ListBox kế thừa từ lớp Window.
- class Animal 1. Sự kế thừa { protected int ifoots; protected string sName; protected void setFoot(int ival) { ifoots = ival; } protected void setName(string sVal) { sName = sVal; } public void displayProperties() { Console.WriteLine(sName + " have " + ifoots.ToString()+ " foots"); }
- class Dog : Animal 1. Sự kế thừa { public Dog(int ival) { setName("Dog"); ifoots = ival; } } class Chicken : Animal { public Chicken(int ival) { setName("Chicken"); setFoot(ival); }
- 1. Sự kế thừa Ở ví dụ trên, Dog và Chicken là hai lớp kế thừa từ lớp Animal, do đó các thuộc tính như số chân, ifoots và tên sName đương nhiên xuất hiện trong hai lớp này và cho phép sử dụng. Tương tự, các hàm như setName(), setFoot(), displayProperties() tại lớp Animal cũng được kế thừa xuống hai lớp Dog và Chicken. Do đó ta có thể gọi những hàm này, và kết quả hiển thị khi gọi hàm displayProperties() theo đối tượng objDog và objChicken là khác nhau.
- 2. Đa hình class Parent { public int methodA() { return methodB() * methodC(); } public virtual int methodB() { return 1; } public int methodC() { return 2; } }
- class Child : Parent 2. Đa hình { public override int methodB() { return 3; } } class Program { static void Main(string[] args) { Child objchild = new Child(); Console.WriteLine("Result is " + objchild.methodA().ToString()); Console.Read(); } }
- 2. Đa hình Kết quả chạy trương trình 6
- 3. Lớp trừu tượng abstract class MyBaseC // Abstract class { protected int x = 100; protected int y = 150; public abstract void MyMethod(); // Abstract method public abstract int GetX // Abstract property { get; } public abstract int GetY // Abstract property { get; } }
- 3. Lớp trừu tượng class MyDerivedC : MyBaseC { public override void MyMethod() { x++; y++; } public override int GetX // overriding property { get { return x + 10; } } public override int GetY // overriding property { get { return y + 10; } }
- 3. Lớp trừu tượng class Program { static void Main(string[] args) { MyDerivedC mC = new MyDerivedC(); mC.MyMethod(); Console.WriteLine("x = {0}, y = {1}", mC.GetX, mC.GetY); } } } Kết quả : x = 111, y = 161 Lớp niêm phong với ý nghĩa trái ngược hẳn với lớp trừu tượng. Lớp niêm phong không cho bất kỳ lớp nào khác kế thừa nó. Ta dùng từ khoá sealed để thay cho từ khoá abstract để được lớp này.
- 4. Các lớp lồng nhau public class A { public class B { } } class Program { static void Main(string[] args) { A.B b = new A.B(); } }
- 4. Các lớp lồng nhau class MyClass { class MyCounter { public int Count = 0; } private MyCounter counter; public MyClass() { counter = new MyCounter(); } public int Incr() { return counter.Count++; } public int GetValue() { return counter.Count; } }
- 4. Các lớp lồng nhau class Program { static void Main(string[] args) { MyClass mc = new MyClass(); mc.Incr(); mc.Incr(); mc.Incr(); mc.Incr(); mc.Incr(); mc.Incr(); Console.WriteLine("Total: {0}", mc.GetValue()); } } // Kết quả : Total: 6
- 4.1.1 Truyền tham trị + Truyền tham chiếu không khởi tạo public class ThamChieuref { static void Method(out int i, out string s1, out string s2) { i = 44; s1 = "I've been returned"; s2 = null; } static void Main() { int value; string str1, str2; Method(out value, out str1, out str2); } }
- 4.1.1 Truyền tham trị Dùng tham chiếu out hay ref ? public class ThamChieu { static void swap(? int a,? int b) { int temp; temp = a; a = b; b = temp; } static void Main() { int x = 3, y = 4; Console.Write("Truoc khi goi ham swap()\n"); Console.Write("x = {0}, y = {1}\n", x, y); swap(? x,? y); Console.Write("Sau Khi goi ham swap()\n"); Console.Write("x = {0}, y = {1}\n", x, y); }
- 4.2 Nạp chồng phương thức(Overloading) Nạp chồng phương thức xây dựng nhiều các phương thức cùng tên nhưng nhận các tham số khác nhau. namespace ConsoleApplication2 { class ClsA { public int Total(int a,int b) { return a + b; } public int Total(int a,int b,int c) { return a + b + c; } } }
- 4.2 Nạp chồng phương thức(Overloading) namespace ConsoleApplication2 { public class NapChong { static void Main() { int a = 5, b = 6, c = 7; ClsA A = new ClsA(); Console.Write("Tong a + b = {0}\n",A.Total(a,b)); Console.Write("Tong a + b + c = {0}\n", A.Total(a, b,c)); } } }
- 5. Đóng gói dữ liệu với thuộc tính Đặc tính này cung cấp khả năng bảo vệ các trường dữ liệu bên trong một lớp bằng việc đọc và viết chúng thông qua thuộc tính. Trong ngôn ngữ khác, điều này có thể được thực hiện thông qua việc tạo các phương thức lấy dữ liệu (getter method) và phương thức thiết lập dữ liệu (setter method). 5.1 Thuộc tính đọc và ghi 5.2 Thuộc tính chỉ đọc 5.3 Thuộc tính chỉ ghi
- 5.1 Thuộc tính đọc và ghi public int PropertyName //Khai bao thuoc tinh Address { public string Address get { return iValue; } { set { iValue = value; } get { return sAddress; } } set { sAddress = value; } } Ví dụ về thuộc tính đọc và ghi //Khai bao thuoc tinh Age class ClsPeople public int Age { { //Khai bao bien cuc bo get { return iAge; } set { private string sName; if (value > 100) private string sAddress; iAge = 100; private int iAge; else if (value
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Ôn tập Lập trình hướng đối tượng - GV. Dương Khai Phong
41 p | 477 | 78
-
Bài giảng lập trình DOT NET - Bài 5 Hướng đối tượng C# (tt)
33 p | 174 | 49
-
Bài giảng Lập trình hướng đối tượng: Phần 1 - ThS. Nguyễn Mạnh Sơn
134 p | 100 | 18
-
Bài giảng Lập trình hướng đối tượng trong C #: Chương 5 - GV. Phạm Mạnh Cương
22 p | 124 | 12
-
Bài giảng Lập trình hướng đối tượng - Chương 5: Đa hình
40 p | 112 | 7
-
Giáo trình Lập trình window 1 (Nghề: Lập trình máy tính - Trình độ Cao đẳng) - Trường Cao đẳng Nghề An Giang
87 p | 27 | 7
-
Bài giảng Kỹ thuật lập trình - Chương 5
27 p | 78 | 7
-
Bài giảng Ngôn ngữ lập trình Java: Chương 2 - TS. Phan Nguyên Hải
67 p | 10 | 6
-
Bài giảng Lập trình hướng đối tượng: Chương 5 - GV. Dương Khai Phong
52 p | 80 | 6
-
Bài giảng Lập trình NET và C#: Lecture 5 - TS Đào Nam Anh
23 p | 62 | 5
-
Bài giảng Ngôn ngữ lập trình Java: Giới thiệu về lớp và đối tượng trong java - TS. Nguyễn Thị Hiền
69 p | 67 | 4
-
Bài giảng Kỹ thuật lập trình: Chương 5 - ThS Trần Duy Thanh
34 p | 40 | 4
-
Bài giảng Lập trình trên Windows với Microsoft.NET: Bài 5 - ThS. Trần Bá Nhiệm
20 p | 67 | 4
-
Bài giảng Lập trình trên Windows với Microsoft® .NET: Bài 5 - Hồ Hoàn Kiếm
20 p | 60 | 3
-
Bài giảng Lập trình hướng đối tượng: Chương 5 - Trần Thị Huế
40 p | 55 | 3
-
Bài giảng Ngôn ngữ lập trình: Tổng quan môn học
6 p | 88 | 3
-
Bài giảng Lập trình: Chương 5 - Vũ Song Tùng
40 p | 19 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn