310 likes | 465 Vues
Lập trình Visual Studio .NET. GV: Phan Bá Trí Email: trip182@gmail.com. Huế, 2/2012. Chương 3: Lập trình HĐT với C#. Nội dung: 1. Giới thiệu: - Hàm dựng - Hàm hủy - Trường - Hằng - Phương thức 2. Giới thiệu - Hàm nạp chồng - Hàm ghi đè - Hàm ảo - Lớp trừu tượng - Lớp Sealed.
E N D
Lập trình Visual Studio .NET GV: Phan Bá Trí Email: trip182@gmail.com Huế, 2/2012
Chương 3: Lập trình HĐT với C# Nội dung: 1. Giới thiệu: - Hàm dựng - Hàm hủy - Trường - Hằng - Phương thức 2. Giới thiệu - Hàm nạp chồng - Hàm ghi đè - Hàm ảo - Lớp trừu tượng - Lớp Sealed
Chương 3: Lập trình HĐT với C# 3. Thuộc tính - Các loại thuộc tính - Thuộc tính và trường - Thuộc tính và phương thức - Thuộc tính tĩnh 4. Chỉ mục - Giới thiệu - Khai báo - Chỉ mục và thuộc tính - Chỉ mục và mảng - Chỉ mục nhiều tham số
Chương 3: Lập trình HĐT với C# 5. Sự kiện - Sự kiện là gì - Sự kiện và con trỏ hàm - Khai báo sự kiện - Ví dụ
3.1 Lớp đối tượng - Hàm dựng - Hàm hủy - Trường - Phương thức
3.1 Lớp đối tượng Mức truy cập của biến
3.1 Lớp đối tượng a. Hàm dựng (Constructors) - Là một loại đặc biệt của phương thức trong một lớp - Được gọi khi một lớp được tạo - Thường được sử dụng để khởi tạo các giá trị trong một lớp - Tên trùng với tên lớp - Không trả về giá trị - Nếu không tạo ra hàm dựng C# sẽ tạo ra hàm dựng ngầm định - Một lớp có thể có nhiều hàm dựng nhưng khác nhau về số lượng hoặc kiểu của tham số
Ví dụ: using System; using System.Collections.Generic; using System.Windows.Forms; using System.IO; namespace ArrayList_Bt1 { static class Program { [STAThread] static void Main() { Person p1 = new Person("Nguyen Hoang Ha"); p1.SayName(); Person p2 = new Person("Hoang Ha","112 Thien Thai "); p2.SayName(); }
Ví dụ: public class Person { string HoTen, DiaChi = "Nguyen Hue"; public Person(string HoTen) { this.HoTen = HoTen; } public Person(string HoTen, string DiaChi) { this.HoTen = HoTen; this.DiaChi = DiaChi; } public void SayName() { Console.WriteLine("Ho ten: {0}, dia chi: {1}", HoTen, DiaChi); } } } }
3.1 Lớp đối tượng a.1 Private Constructors - Được sử dụng khi một lớp chỉ có các thành viên tĩnh và lớp không cần phải tạo ra.
3.1 Lớp đối tượng Ví dụ: using System; using System.Collections.Generic; using System.Windows.Forms; using System.IO; namespace ArrayList_Bt1 { static class Program { [STAThread] static void Main() { Console.WriteLine(MatConsants.pi); }
3.1 Lớp đối tượng class MatConsants { public static double pi = 3.14; private MatConsants() { } } } }
3.1 Lớp đối tượng a.2 Static Constructors - Được gọi tự động (chỉ một lần) trước khi thực thể đầu tiên của đối tượng được tạo hoặc các thành viên tĩnh được tham chiếu. - Không có tham số
3.1 Lớp đối tượng b Hàm hủy (Destructor) - Destructor trong C# được gọi là bộ thu gom rác Garbage Collectors. - Bộ thu gom rác sẽ giải phóng bộ nhớ khi đối tượng không còn yêu cầu hoặc tham chiếu. - Destructor khai báo như sau: ~<tên hàm hủy>() { // Câu lệnh; }
3.1 Lớp đối tượng c. Trường (Fileds) - Lưu trữ giá trị - Cú pháp: <mức truy cập> <kiểu> <tên trường> - Mức truy cập: public, private, protected, internal, protected internal - Kiểu: + Kiểu giá trị được định nghĩa sẵn(int, char,…) + Kiểu tham chiếu: lớp, struct, mảng, chuỗi,…
Ví dụ: public class SinhVien { public string HoTen; internal bool GioiTinh; protected DateTime NgaySinh; internal float[] DsDiem = new float[100]; public void HienThi() { SinhVien sv1 = new SinhVien(); sv1.NgaySinh =DateTime.Parse("3/3/99"); Console.WriteLine(sv1.NgaySinh); } } } } using System; using System.Collections.Generic; using System.Windows.Forms; using System.IO; namespace ArrayList_Bt1 { static class Program { [STAThread] static void Main() { SinhVien sv = new SinhVien(); sv.HoTen = "Nguyen Van Trung"; sv.DsDiem[0] = 5; DateTime.Parse("03/02/2012"); Console.WriteLine(sv.HoTen); Console.WriteLine(sv.DsDiem[0]); sv.HienThi(); }
3.1 Lớp đối tượng Trường tĩnh - Được khai báo trong một lớp - Khi sử dụng không cần phải tạo ra lớp chứa trường tĩnh - Khi khai báo chỉ cần dùng static trước tên biến - Truy xuất: <Tên lớp>.tên trường tĩnh
Ví dụ trường tĩnh public class List { public static int Dem = 0; public List()// Hàm dựng được gọi khi khởi tạo { Dem ++; } } } } using System; using System.Collections.Generic; using System.Windows.Forms; using System.IO; namespace ArrayList_Bt1 { static class Program { class Test { [STAThread] static void Main() { Console.WriteLine(List.Dem); List lt1 = new List(); Console.WriteLine(List.Dem); List lt2 = new List(); Console.WriteLine(List.Dem); } }
3.1 Lớp đối tượng d. Hằng (Constants) - Khai báo hàm dùng bổ từ const - Không thể thay đổi giá trị của hằng - Hằng sử dụng như trường tĩnh
Ví dụ về hằng public class Gender { public const int male = 1; public const int female = 0; } } } using System; using System.Collections.Generic; using System.Windows.Forms; using System.IO; namespace ArrayList_Bt1 { static class Program { class Test { [STAThread] static void Main() { Console.WriteLine("Male {0}",Gender.male); Console.WriteLine("Female {0}", Gender.female); } }
3.1 Lớp đối tượng e. Phương thức (Method) - Là nơi tập hợp các câu lệnh - Được khai báo trong lớp hoặc cấu trúc, phải chỉ rõ mức truy cập, tên, kiểu trả về, danh sách các tham số. Nếu không có tham số phải có dấu ngoặc đơn () - Phương thức không trả về giá trị có kiểu khai báo là void - Dùng return trong trường hợp phương thức có giá trị trả về
Ví dụ về phương thức public class Human { public void SayName() { Console.WriteLine("My name is {0}", name); } string name; public Human(string name) { this.name = name; } } } } using System; using System.Collections.Generic; using System.Windows.Forms; using System.IO; namespace ArrayList_Bt1 { static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Human hm = new Human("Nguyen Thom"); hm.SayName(); }
3.2 Hàm Giới thiệu về kế thừa: - C# chỉ hỗ trợ đơn kế thừa, tức là một lớp chỉ có thể kế thừa nhiều nhất là từ một lớp cha - Lớp cơ sở nhất trong C# là lớp System.Object - Cú pháp khai báo: class LopCon:LopCha { Cài đặt lớp con }
Ví dụ về kế thừa public class Person { protected string Name; public Person(string Name) { this.Name = Name; } public void SayName() { Console.WriteLine("Person has Name is {0}", Name); } } public class Employee : Person { public Employee(string Name) : base(Name) { } } } } using System; using System.Collections.Generic; using System.Windows.Forms; namespace KeThua { static class Program { class Test { [STAThread] static void Main() { Person p1 = new Person("Harry Potter"); p1.SayName(); Employee p2 = new Employee ("Nguyen Hoang Hue"); p2.SayName(); } }
3.2 Hàm - Person là lớp cơ sở (Lớp cha) - Employee là lớp dẫn xuất (lớp con) từ lớp Person, vì thế: + Nó kế thừa tất cả các dữ liệu và hàm thành viên của lớp cha (trừ private) + Constructors không tự động kế thừa lên lớp cha, do đó người sử dụng phải chỉ rõ: public Employee (string Name): base (Name) {} Lưu ý: Có thể sử dụng ClassDiagram.cd để thiết kế cho 2 lớp trên
Ví dụ về kế thừa public class Person { protected string Name=“NguyenHoangHa”; public viturual void SayName() { Console.WriteLine("Person has Name {0}", Name); } } public class Employee : Person { double Salary=3500000; public override void SayName() { base.SayName(); Console.WriteLine("Salary is {0}", Salary); } } using System; using System.Collections.Generic; using System.Windows.Forms; namespace KeThua { static class Program { class Test { [STAThread] static void Main() { Employee e = new Employee (); e.SayName(); } }
3.2 Hàm a. Hàm nạp chồng (Overloading) - Hàm nạp chồng là hàm trùng tên trong một lớp nhưng khác nhau về số lượng và kiểu của các tham số. - Không nạp chồng dựa vào tên tham số và kiểu trả về của các tham số
Ví dụ về nạp chồng class TinhDienTich { public double DT(double r) { return Math.PI*r*r; } public double DT(double a, double b) { return a * b; } public double DT(double a, double b, double c) { double p = (a + b + c) / 2; return Math.Sqrt(p*(p - a)*(p - b) * (p - c)); } } } } using System; using System.Collections.Generic; using System.Windows.Forms; namespace Overload { static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { TinhDienTich tdt = new TinhDienTich(); Console.WriteLine("Dien tich hinh tron {0}", tdt.DT(3)); Console.WriteLine("Dien tich hinh chu nhat {0}", tdt.DT(3, 4)); Console.WriteLine("Dien tich tam giac {0}", tdt.DT(3, 4, 5)); }
3.2 Hàm b. Hàm ghi đè (Overriding) - Hàm ghi đè là hàm giống nhau trên cả lớp cha và lớp con - Để ghi đè một hàm đã có trên lớp cha: + Khai báo một hàm mới trong lớp con với tên giống với lớp cha + Sử dụng từ new
Ví dụ về ghi đè public class Person { protected string Name; public Person(string Name) { this.Name = Name; } public void SayName() { Console.WriteLine(“My name is {0}", Name); } } public class Employee : Person { public Employee(string Name):base (Name) {} public new void SayName() { base.SayName(); Console.WriteLine(“Empoyee name is {0}", Name); } } using System; using System.Collections.Generic; using System.Windows.Forms; namespace GhiDe { static class Program { class Test { [STAThread] static void Main() { Employee e = new Employee (“Bill Gate”); e.SayName(); } }