N gôn ngữ C #
T rần V ăn T èo
01/06/2006
N g ôn n g ữ C #
1
Struct
n
n
n
n
n
n
L à kiểu dữ liệu tự tạo, tư ơ ng tự như lớ p.
L à m ột dữ liệu kiểu trị.
K hông hổ trợ kế thừ a và hàm hủy.
S ử dụng struct đối vớ i các kiểu dữ liệu nhỏ, đơ n giản, có các
m ethod và property như kiểu dữ liệu bẩm sinh.
S ử dụng trong m ảng (array) sẽ hiệu quả hơ n về m ặt bộ nhớ ,
như ng kém hiệu quả trong các tập hợ p (collection), vì
collection cần có qui chiếu.
Khai báo struct.
T ạo đối tư ợ ng struct.
S truct và tính kế thừ a.
01/06/2006
N g ôn n g ữ C #
2
Khai báo Struct
n
Cú pháp:
pháp:
[access-modifiers] struct identifier [:interface-list]{ struct member}
using System;
public struct Location{
public int xVal;
public int yVal;
public Location(int x, int y){
this.xVal = x; this.yVal = y;
}
public override void ToString( ){
return String.Format (“{0 },{1}”,
xVal, yVal );
}
01/06/2006
N g ôn n g ữ C #
public int X
{
get{ return xVal; }
set{ xVal = value; }
}
public int Y
{
get { return yVal; }
set { yVal = value; }
}
}
3
Khai báo Struct
n
H àm k h ở i d ự n g và k ế th ừ a (constructor & inheritant)
• S truct 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.
• C ó thể thự c thi nhiều interface.
• N ếu có constructor thì phải có tham số.
• C ác thành viên của S truct không có bộ khở i gán (initializer).
interface IShape( ){
void Paint( );
} //End Interface IShape
struct Rectangle : IShape{
public void P ain t( ) { … }
private int x,y,z;
} //End struct Rectangle
01/06/2006
struct KeyValue{
private string key;
private string value;
public KeyValue( string key, string value ){
this.key = key; this.value = value;
}
} //End struct Keyvalue
N g ôn n g ữ C #
4
T ạo đối tư ợ ng S truct
n
S tru ct th u ộc k iểu trị:
trị:
• N gầm định kế thừ a từ object
object.. Nên khi override hàm
T oS tring() thì hàm này tự đư ợ c gọi khi trao cho hàm
W riteL ine(… ). Location loc = new Location (200, 300);
Console.WriteLine( “L ocation: {0}”, loc );
• L à tham trị.
static void Main( ){
Location loc = new Location( 200, 300 );
myFunc( loc ); // loc.X = ? ; loc.Y = ?
} //End Main.
public void myFunc(Location loc){
loc.X = 100 ; loc.Y = 200;
} //end myFunc
01/06/2006
N g ôn n g ữ C #
5
T ạo đối tư ợ ng S truct
n
T ạo đối tư ợ ng S truct không dùng từ khó a new
new::
• S truct 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..)
K hông triệu gọi hàm khở i dự ng (constructor).
P hải khở i gán các biến thành viên trư ớ c khi triệu gọi các
hàm.
static void Main( ){
Location loc;
static void Main( ){
loc.xVal = 50; //gán thành viên
Location loc;
loc.yVal = 10; //gán thành viên
//không triệu gọi constructor
loc.X = 200; //dùng thuộc tính
loc.xVal = 50;
loc.Y = 300;//dùng thuộc tính
//loc.yVal = 100;
Console.WriteLine(“{0}”,loc);
Console.WriteLine(“{0}”,loc);
01/06/2006
N g ôn n g ữ C #
6
}
//End
Main.
} //End Main.
T ạo đối tư ợ ng S truct
n
S tru ct và tín h k ế th ừ a:
a:
•
•
•
•
•
N gầm kế thừ a từ object
object..
K hông dùng từ khóa abstract và sealed
sealed..
B iến thành viên không có từ khóa protected
protected..
C ác hàm k hôn g có từ k h ó a abstract và virtual
virtual..
T ừ khóa override chỉ sử dụng cho các h àm m u ố n
o v erride các hàm đư ợ c kế thừ a từ đối tư ợ n g object
object..
01/06/2006
N g ôn n g ữ C #
7
Q&A
01/06/2006
N g ôn n g ữ C #
8