Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 24 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
24
Dung lượng
0,95 MB
Nội dung
CẤU TRÚC
CẤU TRÚC
VÀVÀ
GIAO DIỆN
GIAO DIỆN
Giảng viên phụ trách:
Giảng viên phụ trách:
Nguyễn Hoàng Tùng
Nguyễn Hoàng Tùng
Bộ môn Tin học
Bộ môn Tin học
Email: nhoangtung@agu.edu.vn
Email: nhoangtung@agu.edu.vn
Mục đích bài học
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
20/12/2011
Chuyên đề Ngôn ngữ lập trình 3
Chuyên đề Ngôn ngữ lập trình 3
2
2
Cấu trúc (
Cấu trúc (
struct
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ấutrúc để biểu diễn một điểm trên trục toạ độ
hai chiều.
20/12/2011
20/12/2011
Chuyên đề Ngôn ngữ lập trình 3
Chuyên đề Ngôn ngữ lập trình 3
3
3
Khai báo
Khai báo
struct
struct
Cú pháp:
[access-modifier] struct identifier [:interface-list] { struct member }
Ví dụ:
20/12/2011
20/12/2011
Chuyên đề Ngôn ngữ lập trình 3
Chuyên đề Ngôn ngữ lập trình 3
4
4
public struct Location {
private int xVal;
private int yVal;
public Location(int x, int y) {
this.xVal = x;
this.yVal = y;
}
public override string ToString( ) {
return String.Format (“{0},{1}”,
xVal, yVal );
}
public struct Location {
private int xVal;
private int yVal;
public Location(int x, int y) {
this.xVal = x;
this.yVal = y;
}
public override string ToString( ) {
return String.Format (“{0},{1}”,
xVal, yVal );
}
public int X
{
get { return xVal; }
set { xVal = value; }
}
public int Y
{
get { return yVal; }
set { yVal = value; }
}
}
public int X
{
get { return xVal; }
set { xVal = value; }
}
public int Y
{
get { return yVal; }
set { yVal = value; }
}
}
Hàm tạo và Kế thừa
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
20/12/2011
Chuyên đề Ngôn ngữ lập trình 3
Chuyên đề Ngôn ngữ lập trình 3
5
5
Hàm tạo và Kế thừa
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).
20/12/2011
20/12/2011
Chuyên đề Ngôn ngữ lập trình 3
Chuyên đề Ngôn ngữ lập trình 3
6
6
interface IShape()
{
void Paint();
}
struct Rectangle : Ishape
{
public void Paint() { … }
private int x, y, z;
}
interface IShape()
{
void Paint();
}
struct Rectangle : Ishape
{
public void Paint() { … }
private int x, y, z;
}
struct KeyValue
{
private string key;
private string value;
public KeyValue(string key, string value)
{
this.key = key; this.value = value;
}
}
struct KeyValue
{
private string key;
private string value;
public KeyValue(string key, string value)
{
this.key = key; this.value = value;
}
}
Struct là một kiểu dữ liệu
Struct là một kiểu dữ liệu
tham trị
tham trị
Ví dụ:
20/12/2011
20/12/2011
Chuyên đề Ngôn ngữ lập trình 3
Chuyên đề Ngôn ngữ lập trình 3
7
7
static void Main()
{
Location loc = new Location(200, 300);
myFunc(loc);
Console.WriteLine(loc.ToString());
}
static void myFunc(Location loc)
{
loc.X = 100 ;
loc.Y = 200;
}
static void Main()
{
Location loc = new Location(200, 300);
myFunc(loc);
Console.WriteLine(loc.ToString());
}
static void myFunc(Location loc)
{
loc.X = 100 ;
loc.Y = 200;
}
Kết quả:
loc.X = ?
loc.Y = ?
loc.X = ?
loc.Y = ?
Một kiểu khai báo khác của
Một kiểu khai báo khác của
struct
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ụ:
20/12/2011
20/12/2011
Chuyên đề Ngôn ngữ lập trình 3
Chuyên đề Ngôn ngữ lập trình 3
8
8
static void Main() {
Location loc;
loc.X = 100 ;
loc.Y = 200;
myFunc(loc);
}
static void Main() {
Location loc;
loc.X = 100 ;
loc.Y = 200;
myFunc(loc);
}
Không triệu gọi hàm tạo
Không triệu gọi hàm tạo
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.
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.
So sánh
So sánh
struct
struct
vàvà
class
class
20/12/2011
20/12/2011
Chuyên đề Ngôn ngữ lập trình 3
Chuyên đề Ngôn ngữ lập trình 3
9
9
Sử dụng struct khi nào?
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
20/12/2011
Chuyên đề Ngôn ngữ lập trình 3
Chuyên đề Ngôn ngữ lập trình 3
10
10
[...]... doc = new Document doc = new Document(); Document(); doc. Status = -1; doc. Status = -1; doc. Read(); doc. Read(); // Tạo thể hiện bàng cách ép // Tạo thể hiện bàng cách ép IStorable iStor = (IStorable )doc; IStorable iStor = (IStorable )doc; iStor.Status = 0; iStor.Status = 0; iStor.Read(); iStor.Read(); }} 20/12/2011 Ép đối tượng Document về Ép đối tượng Document về kiểu giaodiện IStorable kiểu giao diện. .. 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; Document doc = new Document(); Document doc = new Document(); IStorable iStor = doc as IStorable;... nhiều giaodiệnvà mở rộng: 20/12/2011 Chuyên đề Ngôn ngữ lập trình 3 18 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 giaodiện một cách trực tiếp Tạo thể hiện của giaodiện bằng cách ép (casting) đối tượng Document về kiểu IStorable static void Main(string[] args) {{ static void Main(string[] args) Document... ICompressible ICompressible {{ private int m_Status; private int m_Status; // Thi công giaodiện // Thi công giaodiện IStorable IStorable public void Read() {{… }} public void Read() … public void Write(object obj) public void Write(object obj) {{… }} … public int Status {{… }} public int Status … // Thi công giaodiện // Thi công giaodiện ICompressible ICompressible public void Compress() public void Compress()... Ngôn ngữ lập trình 3 11 Giaodiện (interface) Giaodiệ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 giaodiệ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 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 giaodiện nên bắt đầu bằng... iStor = doc as IStorable; IStorable iStor = doc as IStorable; if (doc is IStorable) if (doc is IStorable) iStor = (IStorable )doc; iStor = (IStorable )doc; if (iStor != null) if (iStor != null) iStor.Read(); iStor.Read(); 20/12/2011 Chuyên đề Ngôn ngữ lập trình 3 20 So sánh interface và lớp abstract 20/12/2011 Chuyên đề Ngôn ngữ lập trình 3 21 So sánh interface và lớp abstract Abstract class cũng có thể... 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ệuvà các từ khóa: abstract, public, protected, internal, private, virtual, override Khi một class (hoặc struct) thiết đặt một giaodiện thì phải thi công tất cả các thành viên của giaodiện này 20/12/2011 Chuyên đề Ngôn ngữ lập trình 3 13 Xây dựng interface Ví dụ: interface IStorable interface... Compress() {{… }} … public void Decompress() public void Decompress() Chuyên đề Ngôn ngữ lập trình 3 15 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 Xây dựng interface Phối hợp cùng lúc nhiều giaodiệnvà mở rộng: interface IStorable {{ interface IStorable void Read(); void Read(); void Write(object obj); void Write(object obj); int Status {{get;... đặt cùng lúc nhiều giao diện: interface IStorable interface IStorable {{ void Read(); void Read(); void Write(object obj); void Write(object obj); int Status {{get; set; }} int Status get; set; }} interface ICompressible interface ICompressible {{ void Compress(); void Compress(); void Decompress(); void Decompress(); }} 20/12/2011 public class Document ::IStorable, public class Document IStorable,... interface IStorable interface IStorable {{ void Read(); void Read(); void Write(object obj); void Write(object obj); int Status {{get; set; }} int Status get; set; }} 20/12/2011 public class Document ::Istorable {{ public class Document Istorable public void Read() {{ public void Read() Console.WriteLine("Thi công hàm Console.WriteLine("Thi công hàm Read của IStorable"); Read của IStorable"); }} public void . CẤU TRÚC
CẤU TRÚC
VÀ
VÀ
GIAO DIỆN
GIAO DIỆN
Giảng viên phụ trách:
Giảng viên phụ trách:
Nguyễn. 3
20
20
Document doc = new Document();
IStorable iStor;
if (doc is IStorable)
iStor = (IStorable )doc;
Document doc = new Document();
IStorable iStor;
if (doc