intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Cấu trúc và giao diện

Chia sẻ: Nguyen Vang | Ngày: | Loại File: PPT | Số trang:24

91
lượt xem
7
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Cấu trúc (struct): Khái niệm, khai báo và sử dụng struct, Phân biệt được struct và class, Nhận biết khi nào nên dùng struct. Giao diện (interface) Khái niệm, khai báo và sử dụng interface, Phân biệt được interface và lớp abstract, Xây dựng interface.

Chủ đề:
Lưu

Nội dung Text: Cấu trúc và giao diện

  1. CẤU TRÚC VÀ GIAO DIỆN Giảng viên phụ trách: Nguyễn Hoàng Tùng Bộ môn Tin học Email: nhoangtung@agu.edu.vn
  2. Mục đích bài học Cấu trúc (struct): Khái niệm, khai báo và sử dụng struct, Phân biệt được struct và class, Nhận biết khi nào nên dùng struct. Giao diện (interface) Khái niệm, khai báo và sử dụng interface, Phân biệt được interface và lớp abstract, Xây dựng interface. 20/12/2011 Chuyên đề Ngôn ngữ lập trình 3 2
  3. Cấu trúc (struct) Là một kiểu dữ liệu tham trị (value type). Sử dụng struct đối với các kiểu dữ liệu nhỏ, đơn giản, có các phương thức và thuộc tính như kiểu dữ liệu bẩm sinh (int, float, string,...). Dùng để đóng gói các trường dữ liệu có liên quan v ới nhau. Ví dụ: Tạo cấu trúc để biểu diễn một điểm trên trục toạ độ hai chiều. 20/12/2011 Chuyên đề Ngôn ngữ lập trình 3 3
  4. Khai báo struct Cú pháp: [access-modifier] struct identifier [:interface-list] { struct member } Ví dụ: public struct Location { public int X private int xVal; { private int yVal; get { return xVal; } public Location(int x, int y) { set { xVal = value; } this.xVal = x; } this.yVal = y; public int Y } { public override string ToString( ) { get { return yVal; } return String.Format (“{0},{1}”, set { yVal = value; } xVal, yVal ); } } } 20/12/2011 Chuyên đề Ngôn ngữ lập trình 3 4
  5. Hàm tạo và Kế thừa Ngầm định kế thừa từ lớp Object. Ngoài ra, struct không kế thừa bất cứ class hay struct nào khác, và không làm cơ s ở cho một class hay struct nào khác. Không dùng từ khóa abstract và sealed. Biến thành viên không có từ khóa protected. Các phương thức không có từ khóa abstract và virtual. Từ khóa override chỉ sử dụng khi override các phương thức được kế thừa từ đối tượng Object. 20/12/2011 Chuyên đề Ngôn ngữ lập trình 3 5
  6. Hàm tạo và Kế thừa Struct có thể thực thi (xây dựng lại) nhiều interface. Nếu có hàm tạo thì phải có tham số, không cho phép hàm tạo không tham số. Các thành viên của struct không có bộ khởi gán (initializer). interface IShape() struct KeyValue { { void Paint(); private string key; } private string value; struct Rectangle : Ishape public KeyValue(string key, string value) { { public void Paint() { … } this.key = key; this.value = value; private int x, y, z; } } } 20/12/2011 Chuyên đề Ngôn ngữ lập trình 3 6
  7. Struct là một kiểu dữ liệu tham trị Ví dụ: Kết quả: static void Main() { Location loc = new Location(200, 300); loc.X = ? myFunc(loc); loc.Y = ? Console.WriteLine(loc.ToString()); } static void myFunc(Location loc) { loc.X = 100 ; loc.Y = 200; } 20/12/2011 Chuyên đề Ngôn ngữ lập trình 3 7
  8. Một kiểu khai báo khác của struct Tạo đối tượng struct không dùng từ khóa new: Struct là kiểu trị nên có thể tạo một đối tượng struct không cần từ khóa new (giống như các kiểu bẩm sinh: int, long,...) Không triệu gọi hàm tạo (constructor). Phải khởi gán các biến thành viên trước khi gọi các phương thức. Ví dụ: static void Main() { Không triệu gọi hàm tạo Location loc; loc.X = 100 ; Phải khởi gán các biến thành viên trước khi gọi các loc.Y = 200; phương thức. myFunc(loc); } 20/12/2011 Chuyên đề Ngôn ngữ lập trình 3 8
  9. So sánh struct và class 20/12/2011 Chuyên đề Ngôn ngữ lập trình 3 9
  10. Sử dụng struct khi nào? Thể hiện (instance) có kích thước nhỏ (16 byte). Có chu kỳ ngắn. Thông thường nằm lồng trong một đối tượng thu ộc class nào đó. Không có ý định cho việc kế thừa. Không thường xuyên được sử dụng để boxing. 20/12/2011 Chuyên đề Ngôn ngữ lập trình 3 10
  11. Demo struct 20/12/2011 Chuyên đề Ngôn ngữ lập trình 3 11
  12. Giao diện (interface) Giao diện giống như một bản vẽ thiết kế, nó đảm bảo việc các chương trình muốn xây dựng lại giao diện phải thực thi tất cả những gì trong bản vẽ. 20/12/2011 Chuyên đề Ngôn ngữ lập trình 3 12
  13. Khai báo interface Cú pháp: [access-modifier] interface identifier [:base-list] { interface body } Không thể cài đặt code trong phần thân. Tên giao diện nên bắt đầu bằng chữ I hoa (IShape, ISinhVien). Các thành viên trong phần thân chỉ bao gồm: phương thức, thuộc tính, sự kiện, bộ chỉ mục. Không thể chứa: hằng, biến, toán tử, hàm tạo, hàm hủy, kiểu dữ liệu và các từ khóa: abstract, public, protected, internal, private, virtual, override. Khi một class (hoặc struct) thiết đặt một giao diện thì ph ải thi công tất cả các thành viên của giao diện này. 20/12/2011 Chuyên đề Ngôn ngữ lập trình 3 13
  14. Xây dựng interface Ví dụ: interface IStorable public class Document : Istorable { { public void Read() { void Read(); void Write(object obj); Console.WriteLine("Thi công hàm int Status { get; set; } Read của IStorable"); } } public void Write(object obj) { Console.WriteLine(obj); } private int m_Status; public int Status { get { return m_Status; } set { m_Status = 20/12/2011 value; } Chuyên đề Ngôn ngữ lập trình 3 14
  15. Xây dựng interface Thiết đặt cùng lúc nhiều giao diện : interface IStorable public class Document : IStorable, { ICompressible void Read(); { void Write(object obj); private int m_Status; int Status { get; set; } } // Thi công giao diện IStorable interface ICompressible public void Read() { … } { public void Write(object obj) void Compress(); {…} void Decompress(); public int Status { … } } // Thi công giao diện ICompressible public void Compress() { … } public void Decompress() 20/12/2011 {…} Chuyên đề Ngôn ngữ lập trình 3 15
  16. Xây dựng interface Thiết đặt cùng lúc nhiều giao diện : 20/12/2011 Chuyên đề Ngôn ngữ lập trình 3 16
  17. Xây dựng interface Phối hợp cùng lúc nhiều giao diện và mở rộng: interface IStorable { public class Document : void Read(); IStorableCompressible { void Write(object obj); private int m_Status; int Status { get; set; } // IStorable } public void Read() { … } public void Write(object obj) interface ICompressible { {…} void Compress(); public int Status { … } void Decompress(); } // ICompressible public void Compress() interface IStorableCompressible : {… } IStorable, ICompressible { public void Decompress() void LogSavedBytes(); {…} } // IStorableCompressible 20/12/2011 public void LogSavedBytes() Chuyên đề Ngôn ngữ lập trình 3 17
  18. Xây dựng interface Phối hợp cùng lúc nhiều giao diện và mở rộng: 20/12/2011 Chuyên đề Ngôn ngữ lập trình 3 18
  19. Truy xuất các phương thức của interface Truy xuất các thành viên của IStorable thông qua các thành viên của lớp Document. Không thể tạo thể hiện giao diện một cách trực tiếp. Tạo thể hiện của giao diện bằng cách ép (casting) đối tượng Document về kiểu IStorable. static void Main(string[] args) { Document doc = new Document(); doc.Status = -1; Ép đối tượng Document về doc.Read(); kiểu giao diện IStorable. // Tạo thể hiện bàng cách ép IStorable iStor = (IStorable)doc; iStor.Status = 0; iStor.Read(); } 20/12/2011 Chuyên đề Ngôn ngữ lập trình 3 19
  20. Truy xuất các phương thức của interface Toán tử is: Cú pháp: expression is type Kiểm tra xem expression (kiểu dữ liệu qui chiếu) có thể ép an toàn về kiểu type không. Toán tử as: Cú pháp: expression as type Kiểm tra xem expression có thể ép an toàn về kiểu type không. Nếu hợp lệ sẽ trả về type. Ngược lại trả về null. Document doc = new Document(); Document doc = new Document(); IStorable iStor; IStorable iStor = doc as IStorable; if (doc is IStorable) if (iStor != null) iStor = (IStorable)doc; iStor.Read(); 20/12/2011 Chuyên đề Ngôn ngữ lập trình 3 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2