Danh mục tài liệu

Hướng Đối Tượng Trong C# part 1

Số trang: 6      Loại file: pdf      Dung lượng: 148.09 KB      Lượt xem: 12      Lượt tải: 0    
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Lớp và Thừa kế: Chúng ta đã được xem cách sử dụng lớp trong chương 2 nhưng để nắm được mối liên hệ giữa các chương, chúng tôi sẽ tóm tắt một vài khái niệm về lớp. Lớp trong C# được định nghĩa với cú pháp sau
Nội dung trích xuất từ tài liệu:
Hướng Đối Tượng Trong C# part 1Lớp và Thừa kế:Chúng ta đã được xem cách sử dụng lớp trong chương 2 nhưng để nắm được mối liên hệgiữa các chương, chúng tôi sẽ tóm tắt một vài khái niệm về lớp. Lớp trong C# được địnhnghĩa với cú pháp sau:class MyClass{ private int someField; public string SomeMethod(bool parameter) { }} Các lớp bao gồm nhiều thành viên, mỗi thành viên là thuật ngữ(term) dùng để chỉ đếnmột dữ liệu hay một chức năng nào đó được định nghĩa trong lớp đó. Ví dụ chúng tadùng thuật ngữ Function để chỉ những thành viên chứa mã như các phươngthức(methods), các thuộc tính(properties), constructor, hay các nạp chồng toánhạng(Operator Overloads).Tất cả các lớp trong C# là những kiểu tham khảo. Tức là khi bạn khai báo một kiểu lớpthì có một biến lưu trữ sự tham khảo đến một thể hiện (instance) của lớp đó. Và sử dụnglệnh new để tạo ra một đối tượng. Ví dụ tạo ra đối tượng myObject như sau:MyClass myObject;myObject = new MyClass();Tuy nhiên bạn có thể khai báo và khởi tạo đối tượng cùng một lúc.MyClass myObject = new MyClass();Đơn thừa kế:C# hỗ trợ đơn thừa kế giữa các lớp. Một lớp có thể thừa hưởng những thuộc tính vàphương thức từ một lớp khác. Cú pháp:class MyDerivedClass : MyBaseClass{ // functions and data members here}Cú pháp này khác với C++ về phạm vi, không có bổ từ truy cập(access modifier). Tức làC# không hỗ trợ như C++ về các khái niệm thừa kế public hay private vì nó làm ngônngữ thêm phức tạp. Trong thực tế thì thừa kế private rất ít được sử dụng.Trong C# một lớp bắt buột phải thừa kế từ một lớp nào đó. C# hỗ trợ một lớp cơ sở toàndiện gọi là System.Object.Phương thức nạp chồng(Overloading):C# hỗ trợ phương thức nạp chồng với một vài dạng phương thức khác nhau về những đặctính sau: tên, số lượng thông số, và kiểu thông số. Nhưng nó không hỗ trợ những thông sốmặc định như C++ và VB. Một cách đơn giản là bạn khai báo những phương thức cùngtên nhưng khác số lượng và kiểu của thông số:class ResultDisplayer{ void DisplayResult(string result) { // implementation } void DisplayResult(int result) { // implementation }}Bởi vì C# không hỗ trợ những thông số tuỳ chọn nên bạn cần sử dụng những phươngthức nạp chồng để đạt được cùng một hiệu quả:class MyClass{ int DoSomething(int x) // want 2nd parameter with default value 10 { DoSomething(x, 10); } int DoSomething(int x, int y) { // implementation }}Trong bất kỳ một ngôn ngữ nào, phương thức nạp chồng có thể đem đến một lỗi nghiêmtrọng nếu nó bị gọi sai. Trong chương tới ta sẽ bàn cách để tránh đều đó. Trong C# cómột vài điểm khác nhỏ về thông số trong các phương thức nạp chồng cần biết như sau: • Nó không chấp nhận hai phương thức chỉ khác nhau về kiểu trả về. • Nó không chấp nhận hai phương thức chỉ khác nhau về đặc tính của một thông số đang được khai báo như ref hay out.Phương thức Overriden và Hide:Bằng cách khai báo virtual trong một hàm ở lớp cơ sở thì cho phép hàm đó đượcoverriden trong bất kỳ một lớp thừa hưởng nào.class MyBaseClass{ public virtual string VirtualMethod() { return This method is virtual and defined in MyBaseClass; }} Như ví dụ trên, tức là ta có thể tạo ra một sự thực thi khác của VirtualMethod() trongmột lớp thừa hưởng của MyBaseClass. Và khi gọi phương thức trong một thể hiện củalớp thừa hưởng thì phương thức của lớp thừa hưởng sẽ được thi hành mà không quan tâmđến phương thức đó ở lớp cơ sở. Khác với C++ và Java, trong C# những hàm không đượckhai báo virtual mặc định mà bạn phải khai báo virtual một cách rõ ràng và khi một hàmmuốn override một hàm khác thì phải sử dụng từ khoá override:class MyDerivedClass : MyBaseClass{ public override string VirtualMethod() { return This method is an override defined in MyDerivedClass; }}Những trường thành viên(member fields) và những hàm tĩnh thì không được khai báoVirtual.Nếu một phương thức có cùng đặc tính trong cả hai khai báo ở lớp cơ sở và lớp thừahưởng nhưng các phương thức này thì không khai báo virtual hay overriden thì sẽ đượcgọi là: lớp thừa hưởng hide lớp cơ sở đó. Kết quả là: phương thức nào được gọi phụthuộc vào kiểu của biến được sử dụng để tham khảo đến thể hiện, chứ không phải kiểucủa chính thể hiện đó.Trong hầu hết mọi trường hợp bạn luôn thích override một phương thức hơn là hide nó.Bởi vì hide dễ gây ra những lỗi nghiêm trọng. Nhưng cú pháp C# được thiết kế để bảođảm cho những nhà phát triển sẽ được cảnh báo trong thời gian biên dịch về vấn đềnghiêm trọng này.Nếu bạn tạo ra hai phương thức hoàn toàn giống nhau ở cả lớp thừa hưởng và lớp cơ sởmà không có khai báo virtual và override thì bạn sẽ bị cảnh báo trong khi biên dịch.Trong C#, bạn nên sử dụng từ khoá new để đảm bảo bạn muốn hide phương thức đó.Gọi các phiên bản cơ sở của các chức năng(base Versions of Functions):Trong C# có một cú pháp đặc b ...