You are on page 1of 16

C# Fast Food

http://hoclaptrinh.vn/C-C++-Visual-C/C-Fast-Food/In.html

C# Fast Food
Th ba, 19 Thng 8 2008 05:39

Trn Phm thanh Tng C - C++ - Visual C#

Bi vit ny dnh cho nhng bn thng tho v C++ v mun tip cn C# mt cch nhanh chng. Tuy nhin, nhng
bn mi bt u hc C# cng c th xem n nh l mt bn tm tt v C# nhm nh hng tt hn trong vic hc ngn
ng ny.
Gii thiu
C# l mt ngn ng mang nhng c im ca C++, c phong cch lp trnh nh Java v c m hnh ng dng nh
Basic. Nu bit v C++ th cc bn s mt khng di mt gi tm hiu c php ca C#. Cn nu cc bn quen
thuc vi Java th s l mt li th khc khi hc C#. Cu trc chng trnh Java, khi nim v gi (package), garbage
collection chc chn s gip bn hc C# nhanh hn. Trong bi vit ny, khi chng ta ni v cc cu trc ca C#, ti s
xem nh cc bn bit C++.
Bi vit ny s ni v cc cu trc v nhng c im ca ngn ng C#, minh ha bng nhng v d ngn gn v d hiu
khi cc bn nhn vo v d, cc bn c th hiu r nhng khi nim. Trong bi vit ny , chng ta s bn v nhng ch
sau:

Cu trc chng trnh


Namespaces
Kiu d liu
Bin
Ton t v biu thc
Kiu lit k
Cu lnh
Class v Struct
Modifier
Cc thuc tnh (Property)
Interface
Cc thng s hm
Mng (array)
Indexer
Boxing v Unboxing
Delegate
Tha k v tnh a hnh
Chng ta s khng bn v cc vn nh: C# thng dng hn hay C++ thng dng hn, cc khi nim garbage
collection, threading, x l file chuyn kiu d liu, th vin .Net.
Cu trc chng trnh
Cng nh C++, C# thuc dng case sensitive (phn bit ch hoa v ch thng). Du chm phy (;) l k hiu ngn
cch cc pht biu. Khng nh C++, trong C# khng c s phn chia gia phn khai bo (header) v phn hin thc
(cpp). Mi on m (khai bo class v hin thc) u c t trong mt file c phn m rng .cs. By gi chng ta lm
quen vi chng trnh u tin ca C#, chng trnh Hello world:
using System;
namespace MyNameSpace
{
class HelloWorld
{
static void Main(string[] args)
{
Console.WriteLine (Hello World);
}
}
}

Trong C#, tt c cc cu lnh, phng thc c gi trong mt class, v tt c cc class c gi trong mt


namespace (ging nh file trong folder). Cng nh C++, c mt chng trnh chnh cha nhng im nhp cho chng

1 of 16

9/15/2008 5:12 PM

C# Fast Food

http://hoclaptrinh.vn/C-C++-Visual-C/C-Fast-Food/In.html

trnh ca bn. Chng trnh chnh ca C++ c bt u bng main, trong khi chng trnh chnh ca C# bt u
vi Main.
Khng cn t du chm phy sau mt khi class hay sau nh ngha struct. l quy nh ca C++, C# th khng cn.

Namespaces
Mi class c gi li trong mt namespace. Tht ra, namespaces l mt khi nim trong C++, nhng trong C# chng ta
dng namespaces thng xuyn hn. Cc bn c th truy xut mt class trong mt namespaces bng cch dng du
chm (.). MyNameSpace l namespace ca chng trnh Hello world trn.
By gi chng ta hy vit li chng trnh HelloWorld bng cch truy xut lp HelloWorld t mt lp khc trong mt
namespaces khc:

using System;
namespace AnotherNameSpace
{
class AnotherClass
{
public void Func()
{
Console.WriteLine (Hello World);
}
}
}

By gi t lp HelloWorld, cc bn c th truy xut n:

using System;
using AnotherNameSpace;
namespace MyNameSpace
{
class HelloWorld
{
static void Main(string[] args)
{
AnotherClass obj = new AnotherClass();
obj.Func();
}
}
}
Trong th vin .Net, System l namespace cp cao nht trong cc namespace. Trong C#, bng cch mc nh tn ti mt
namespace ton cc, mt class nh ngha bn ngoi mt namespace c lu trc tip trong namespace ton cc ny
v do bn c th truy xut lp ny m khng cn bt k mt qualifier (b t) no. Bn cng c th nh ngha nhng
namespace lng nhau.

--Using
Ch th #include trong C++ c thay th bi t kha using, theo sau l tn ca mt namespace, chng hn nh
using System. System l mt namespace nn trong cha tt c nhng namespace khc v tt c cc lp c nh
ngha trong nhng namespace . Lp nn cho mi i tng l Object trong namespace System.

2 of 16

9/15/2008 5:12 PM

C# Fast Food

http://hoclaptrinh.vn/C-C++-Visual-C/C-Fast-Food/In.html

----Bin
Cc bin trong C# hu ht u ging trong C++, ngoi tr nhng khc bit sau:
Bin trong C# lun cn phi khi to trc khi bn truy xut n, nu khng bn s b bo li trong khi bin dch. Do ,
phi nh rng khng th truy xut mt bin cha c khi to.
Bn khng th truy xut mt con tr khng tr vo u c trong C#.
Mt biu thc khng th gi mt phn t ca mng (array) m ch s ca n vt ra khi kch thc ca mng.
Khng c khi nim bin ton cc hay hm ton cc trong C# v nhng khi
nim v ton cc c biu din thng qua nhng hm v bin static
---Kiu d liu
Tt c nhng kiu d liu ca C# c nh ngha trong lp Object. C hai loi kiu d liu:
*Kiu d liu c bn (dng sn)
*Kiu d liu do ngi dng nh ngha
Di y l bng lit k cc kiu d liu nh sn trong trong C#:
Kiu

Kch thc M t

Byte
Sbyte

unsigned byte
signed byte

Short
Ushort

signed short
unsigned short

Int
Uint

4
4

Long
Ulong

8
8

Float
Double

signed integer
unsigned integer
signed long
unsigned long
floating point
double precision

Decimal
8
fixed precision
String unicode string
Char unicode
char
Bool true, false boolean

Ghi ch: Kch thc ca cc kiu d liu trong C++ v C# khng ging nhau, v d nh kiu long trong C++ l 4 byte ,
trong C# l 8 byte. Kiu bool v string cng khc nhau, kiu bool trong C# ch chp nhn gi tr true hay false ch khng
chp nhn gi tr integer. Kiu d liu do ngi dng nh ngha bao gm:
1.Class
2.Struct
3.Interface
Nu phn chia kiu d liu theo s cp pht b nh th ta c th chia lm hai loi:
1.Kiu gi tr
2.Kiu tham kho
Kiu gi tr
Kiu gi tr l nhng d liu c cp pht b nh trong stack. Cc loi d liu ny bao gm:
Tt c nhng kiu d liu dng sn ngoi tr kiu string.
Struct
Kiu lit k
Kiu tham kho
Kiu tham kho c cp pht b nh trn heap v s tr thnh rc khi chng khng c s dng na. khai bo
kiu d liu ny, ta dng t kha new, v khng nh C++, khng c t kha delete . Trong C#, chng t ng c gom
li bi b phn thu thp rc (garbage collector).
--Kiu tham kho bao gm:
Class
Interface
Kiu tp hp nh mng
String
--Kiu lit k (Enumeration)
Kiu lit k trong C# hon ton ging nh C++, chng c nh ngha thng qua t kha enum
V d nh:
enum Weekdays

3 of 16

9/15/2008 5:12 PM

C# Fast Food

http://hoclaptrinh.vn/C-C++-Visual-C/C-Fast-Food/In.html

{
Saturday, Sunday, Monday
Tuesday, Wednesday, Thursday, Friday
}

Class v Struct
Class v Struct cng tng t nh C++, ngoi tr s khc nhau v s cp pht b nh. Nhng i tng ca class
c cp pht b nh trong heap v c to ra bng cch dng new, cn struct c cp pht b nh trong stack.
Struct trong C# l kiu d liu rt nh v nhanh. Do i vi nhng kiu d liu nng bn nn khai bo class. By gi
chng ta quan st v d sau:
struct Date
{
int day;
int month;
int year;
}

class Date
{
int day;
int month;
int year;
string weekday;
string monthName;
public int GetDay()
{
return day;
}
public int GetMonth()
{
return month;
}
public int GetYear()
{
return year;
}
public void SetDay(int Day)
{
day = Day ;
}
public void SetMonth(int Month)
{
month = Month;
}
public void SetYear(int Year)
{
year = Year;
}
public bool IsLeapYear()
{
return (year/4 == 0);

4 of 16

9/15/2008 5:12 PM

C# Fast Food

http://hoclaptrinh.vn/C-C++-Visual-C/C-Fast-Food/In.html

}
public void SetDate (int day, int month, int year)
{
}
...
}
Cc thuc tnh
Nu bn quen thuc vi hng i tng trong C++, bn t hn phi c cht khi nim g v thuc tnh
(properties). Cc thuc tnh trong v d class Date trn l day, month v year. Nu trong C++, bn phi dng phng
thc Get v Set th C# cung cp nhng cch thun tin hn, n gin hn v trc tip hn truy xut nhng thuc tnh.
i vi v d trn ta c th vit li nh sau:

using System;
class Date
{
public int Day{
get {
return day;
}
set {
day = value;
}
}
int day;
public int Month{
get {
return month;
}
set {
month = value;
}
}
int month;

public int Year{


get {
return year;
}
set {
year = value;
}
}
int year;

public bool IsLeapYear(int year)


{
return year%4== 0 ? true:false;
}

5 of 16

9/15/2008 5:12 PM

C# Fast Food

http://hoclaptrinh.vn/C-C++-Visual-C/C-Fast-Food/In.html

public void SetDate (int day, int month, int year)


{
this.day = day;
this.month = month;
this.year = year;
}
}
Sau y l cch bn ly v thit lp thuc tnh:
class User
{
public static void Main()
{
Date date = new Date();
date.Day = 27;
date.Month = 6;
date.Year = 2003;
Console.WriteLine(Date: {0}/{1}/{2},date.Day, date.Month, date.Year);
}
}
B t (Modifier)
Trong C++, chng ta gp cc b t thng dng nh public, private v protected. Sau y chng ta s ni v mt s
b t mi trong C#.
Readonly
readonly ch c dng cho nhng d liu thnh vin (member) ca class. D liu readonly ch c th c c khi
chng c khi to trc tip hay gn gi tr cho chng trong constructor. S khc nhau gia d liu readonly v
const (hng) l khi khai bo hng, ta phi khi to gi tr cho n mt cch trc tip. Hy nhn vo v
d sau:
class MyClass
{
//trc tip
const int constInt = 100;
//khng trc tip
readonly int myInt = 5;
readonly int myInt2;
public MyClass()
{
// khng trc tip
myInt2 = 8;
}
public Func()
{
myInt = 7; //khng hp l
Console.WriteLine(myInt2.ToString());
}
}

Sealed
S dng t kha sealed khi khai bo mt class s khng cho php bn ly bt k class no t n. Do bn nn s dung
t kha sealed cho nhng lp m bn khng mun nhng lp con tha k chng.
sealed class CanNotbeTheParent

6 of 16

9/15/2008 5:12 PM

C# Fast Food

http://hoclaptrinh.vn/C-C++-Visual-C/C-Fast-Food/In.html

{
int a = 5;
}

Unsafe
Bn c th nh ngha mt ng cnh khng an ton trong C# bng cch dng t kha unsafe.
Trong ng cnh khng an ton, bn c th vit mt on m khng an ton, v d nh con tr C++ chng hn. Chng ta
hy xem xt v d sau:

public unsafe MyFunction( int * pInt, double* pDouble)


{
int* pAnotherInt = new int;
*pAnotherInt = 10;
pInt = pAnotherInt;
...
*pDouble = 8.9;
}

Interface
Nu bn c khi nim v COM, bn s d dng hiu c ni dung ca phn ny. Mt interface l mt lp tru tng
c bn, trong ch cha nhng k hiu ca hm, s hin thc nhng hm ny c cung cp bi nhng lp con.
Trong C#, bn c th nh ngha nhng class nh nhng interface thng qua t kha interface. .NET c nn tng t
nhiu interface. Trong C# bn khng th dng nhiu lp tha k, iu m trong C++ cho php, nhng tht ra bn cht
ca s a tha k c thc hin thng qua interface. Nhng lp con ca bn cng c th hin thc a interface.

using System;
interface myDrawing
{
int originx
{
get;
set;
}
int originy
{
get;
set;
}
void Draw(object shape);
}
class Shape: myDrawing
{
int OriX;
int OriY;
public int originx
{
get{
return OriX;
}
set{

7 of 16

9/15/2008 5:12 PM

C# Fast Food

http://hoclaptrinh.vn/C-C++-Visual-C/C-Fast-Food/In.html

OriX = value;
}
}
public int originy
{
get{
return OriY;
}
set{
OriY = value;
}
}
public void Draw(object shape)
{
...
}
public void MoveShape(int newX, int newY)
{
.....
}
}

---Mng
Mng trong C# c nhiu tnh nng vt tri hn so vi C++. Mng c cp pht b nh trong heap v do n c
truyn bng tham kho. Bn khng th truy xut mt phn t vt ngoi gii hn trong mt mng (c ch s ln hn s
phn t trong mng). Do C# khc phc li ny. Ngoi ra C# cn cung cp mt s hm tr gip x l cc phn t
trong mng. Ta c th thy r s khc nhau gia c php ca mng trong C++ v C# l:
Du ngoc vung c t sau tn kiu ch khng phi sau tn bin.
Bn c th to vng nh cho phn t trong mng bng cch dng t kha new.
Ngoi ra C# cn h tr vic hin thc mng mt chiu (single dimensional), a chiu (multi dimensional) v jagged array
(mng ca mng). V d nh:

// mng mt chiu n gin


int[] array = new int[10];
for (int i = 0;i < array.Length; i++)
array[i] = i;
// mng hai chiu
int[,] array2 = new int[5,10];
array2[1,2] = 5;
// mng 3 chiu
int[,,] array3 = new int[5,10,5];
array3[0,2,4] = 9;
// mng ca mng
int[][] arrayOfarray = = new int[2];
arrayOfarray[0] = new int[4];
arrayOfarray[0] = new int[] {1,2,15};

----Indexer
Indexer c dng vit mt phng thc truy xut trc tip mt phn t t mt tp hp bng cch dng du [ ], nh
trong mng. Vic bn cn lm ch l ch r ch s truy xut mt phn t. C php ca mt indexer cng ging nh ca
thuc tnh mt class, ngoi tr chng cn mt thng s nhp, chnh l ch s ca phn t cn truy xut.
By gi chng ta tip tc tham kho mt v d cho vn ny. Trong v d sau bn s bt gp lp CollectionBase, l
mt lp th vin dng to ra nhng tp hp. Danh sch (list) l mt protected member ca lp CollectionBase,

8 of 16

9/15/2008 5:12 PM

C# Fast Food

http://hoclaptrinh.vn/C-C++-Visual-C/C-Fast-Food/In.html

trong lu tr tp hp cc danh sch.

class Shapes: CollectionBase


{
public void add(Shape shp)
{
List.Add(shp);
}
//indexer
public Shape this[int index]
{
get {
return (Shape) List[index];
}
set {
List[index] = value ;
}
}
}

Boxing/Unboxing
Boxing l mt khi nim mi trong C#. Nh cp trn, mi kiu d liu, dng sn hay do ngi dng nh ngha,
u c ly t mt lp c bn l Object trong namespace System.
Do vic ng gi nhng kiu cn bn hay nguyn thy vo trong class Object c gi l boxing, v thao tc ngc
li c gi l unboxing. V d nh:

class Test
{
static void Main()
{
int myInt = 12;
// boxing
object obj = myInt ;
// unboxing
int myInt2 = (int) obj;
}
}

V d trn cho ta thy c hai thao tc boxing v unboxing. Mt gi tr int c th c chuyn i thnh i tng v
chuyn i tr li thnh int. Khi kiu d liu ca mt bin cn c chuyn thnh mt kiu truyn bng tham kho, mt
object box c to ra cha gi tr, v gi tr c lu vo box. Unboxing ch l qu trnh ngc li. Khi mt object
box c tr li thnh kiu nguyn thy , gi tr s c chuyn t box sang nh lu tr ban u.
---Thng s ca hm
Trong C# c 3 loi thng s:
1.Thng s in/ truyn bng tr.
2.Thng s in out/truyn bng tham kho.
3.Thng s out.
Nu bn nm r v COM interface v nhng kiu thng s ca n, bn s d dng hiu c cc kiu thng s ca
C#.
--Thng s in/ truyn bng tr
Khi nim thng s truyn bng tr cng tng t nh trong C++. Gi tr truyn c chp vo mt nh v c truyn
vo hm.
V d:

9 of 16

9/15/2008 5:12 PM

C# Fast Food

http://hoclaptrinh.vn/C-C++-Visual-C/C-Fast-Food/In.html

SetDay(5);
...
void SetDay(int day)
{
....
}

---Thng s in out/truynbng tham kho


Thng s truyn bng tham kho trong C++ c truyn thng qua mt con tr hay ton t &. Trong C#, thng s truyn
bng tham kho cn c gi l thng s in out, v khi bn truyn mt a ch tham kho ca mt nh, bn truyn
mt gi tr nhp v ly mt gi tr xut t hm .
Bn khng th truyn mt thng s cha khi to vo mt hm. C# dng t kha ref ch thng s truyn bng tham
kho. Bn cng c th dng t kha ref cho mt i s trong khi truyn n vo mt hm c thng s truyn bng tham
kho. V d:

int a= 5;
FunctionA(ref a);
Console.WriteLine(a);
void FunctionA(ref int Val)
{
int x= Val;
Val = x* 4;
}

----Thng s out
L thng s ch tr v gi tr l kt qu ca mt hm, khng i hi gi tr nhp. C# dng t kha out cho loi tham s ny.
int Val;
GetNodeValue(Val);
bool GetNodeValue(out int Val)
{
Val = value;
return true;
}

---S lng cc thng s v mng


truyn thng s l mt mng trong C#, ngi ta dng t kha params. Ch c th c mt i s kiu mng. Bn c th
truyn phn t nh l mt i s ca mng . Tt nht, ta hy xem v d sau:
void Func(params int[] array)
{
Console.WriteLine(number of elements {0}, array.Length);
}
Func();
Func(5);
Func(7,9);
Func(new int[] {3,8,10});
int[] array = new int[8] {1,3,4,5,5,6,7,5};
Func(array);
---Ton t v biu thc
Hu ht cc ton t trong C# hon ton ging nh trong C++, do biu thc cng vy. Tuy nhin C# cn b sung thm

10 of 16

9/15/2008 5:12 PM

C# Fast Food

http://hoclaptrinh.vn/C-C++-Visual-C/C-Fast-Food/In.html

mt s ton t mi v hu ch. Chng ta s xem xt vi ton t trong s .


---Ton t is
Ton t ny c dng kim tra xem kiu ca cc ton hng c tng ng hay khng. Ton t is thng c s
dng trong kch bn a ng cnh. Ton t ny c hai ton hng v kt qu tr v c kiu bool. Chng ta xem v d sau:
void function(object param)
{
if(param is ClassA)
// something
else if(param is MyStruct)
//something
}
}

---Ton t as
Ton t as kim tra xem kiu ca cc ton hng c kh i hay khng, nu c th kt qu tr v l mt i tng c
chuyn i hay c box. Nu i tng khng chuyn i hay box c, kt qu tr v null. Chng ta xem v d sau
hiu r hn v khi nim ny:

Shape shp = new Shape();


//kt qu l null, khng chuyn i
//kiu c
Vehicle veh = shp as Vehicle;
Circle cir = new Circle();
Shape shp = cir;
//s c chuyn i
Circle cir2 = shp as Circle;
object[] objects = new object[2];
objects[0] = Aisha;
object[1] = new Shape();
string str;
for(int i=0; i&< objects.Length; i++)
{
str = objects[i] as string;
if(str == null)
Console.WriteLine(can not be converted);
else
Console.WriteLine({0},str);
}
----Cu lnh
a s cc cu lnh trong C# u tng t nh trong C++, ngoi ra cn c mt s cu lnh mi c b sung v c mt
vi s sa i trong mt s cu lnh c. Sau y l mt s cu lnh mi:
foreach: dng cho vic thc hin vng lp cho mt tp hp nh mng V d:
foreach (string s in array)
Console.WriteLine(s);

lock: dng bao mt on code thnh mt section.


checked/unchecked: dng kim tra trn trong cc ton t c i s l s. V d nh:
int x = Int32.MaxValue; x++;

11 of 16

9/15/2008 5:12 PM

C# Fast Food

http://hoclaptrinh.vn/C-C++-Visual-C/C-Fast-Food/In.html

{
x++;
}
unchecked
{
x++; }
}

---Switch
Trong C#, cu lnh switch c thay i nh sau:
1.Sau khi thc thi mt cu lnh case, chng trnh s khng nhy n cu lnh case k tip. V d:

int var = 100;


switch (var)
{
case 100:
Console.WriteLine(<Value is 100>); // khng dng break
case 200:
Console.WriteLine(<Value is 200>); break;
}

Trong C++, kt qu s l: <Value is 100><Value is 200>


Trong C#, bn s nhn c thng bo li sau:
error CS0163: Control cannot fall through from one case label (case 100:) to another

Tuy nhin, bn c th lm nh sau:


switch (var)
{
case 100:
case 200:
Console.WriteLine(100 or 200<VALUE is 200>);
break;
}

2.Bn cng c th dng hng trong gi tr ca case. V d nh:


const string WeekEnd = Sunday;
const string WeekDay1 = Monday;
....
string WeekDay =
Console.ReadLine();
switch (WeekDay )
{
case WeekEnd:
Console.WriteLine(Its weekend!!);
break;
case WeekDay1:

12 of 16

9/15/2008 5:12 PM

C# Fast Food

http://hoclaptrinh.vn/C-C++-Visual-C/C-Fast-Food/In.html

Console.WriteLine(Its Monday);
break;
}

----Delegate
Delegate cho php chng ta lu s tham kho hm vo mt bin. Trong C++, vic ny ging nh dng v lu con tr
hm v chng ta hay dng typedef. V d:

delegate int Operation(int val1, int val2);


public int Add(int val1, int val2)
{
return val1 + val2;
}

public int Subtract (int val1, int val2)


{
return val1- val2;
}

public void Perform()


{
Operation Oper;
Console.WriteLine(Enter + or - );
string optor = Console.ReadLine();
Console.WriteLine(Enter 2 operands);
string opnd1 = Console.ReadLine();
string opnd2 = Console.ReadLine();
int val1 = Convert.ToInt32 (opnd1);
int val2 = Convert.ToInt32 (opnd2);
if (optor == +)
Oper = new Operation(Add);
else
Oper = new Operation(Subtract);
Console.WriteLine( Result ={0}, Oper(val1, val2));
}

Tnh tha k v tnh a hnh


Trong C# ch cho php s tha k n. Nu bn mun thc hin a tha k, bn c th dng interface. V d:

class Parent{
}
class Child : Parent

Hm o
T khi nim hm o n hin thc khi nim a hnh trong C# l nh nhau, ngoi tr vic bn dng t kha override i
vi vic hin thc hm o trong lp con. Lp cha vn s dng t kha virtual. Lp no override phng thc o cng
s dng t kha override.

13 of 16

9/15/2008 5:12 PM

C# Fast Food

http://hoclaptrinh.vn/C-C++-Visual-C/C-Fast-Food/In.html

class Shape
{
public virtual void Draw()
{
Console.WriteLine(Shape.Draw);
}
}

class Rectangle : Shape


{
public override void Draw()
{
Console.WriteLine(Rectangle.Draw);
}
}

class Square : Rectangle


{
public override void Draw()
{
Console.WriteLine(Square.Draw);
}
}

class MainClass
{
static void Main(string[] args)
{
Shape[] shp = new Shape[3];
Rectangle rect =
new Rectangle();
shp[0] = new Shape();
shp[1] = rect;
shp[2] = new Square();
shp[0].Draw();
shp[1].Draw();
shp[2].Draw();
}

}
Xut ra kt qu nh sau:

Shape.Draw
Rectangle.Draw
Square.Draw

n lp cha bng cch dng new Trong mt lp con, bn c th nh ngha mt hm mi, n vi lp cha, bng cch
dng t kha new. Trong v d di y, l bn sa i ca v d trn, ti thay th t kha override bng t kha new
trong lp Rectangle.
class Shape

14 of 16

9/15/2008 5:12 PM

C# Fast Food

http://hoclaptrinh.vn/C-C++-Visual-C/C-Fast-Food/In.html

{
public virtual void Draw()
{
Console.WriteLine(Shape.Draw);
}
}
class Rectangle : Shape
{
public new void Draw()
{
Console.WriteLine(Rectangle.Draw);
}
}

class Square : Rectangle


{
public new void Draw()
{
Console.WriteLine(Square.Draw);
}
}
class MainClass
{
static void Main(string[] args)
{
Console.WriteLine(Using Polymorphism:);
Shape[] shp = new Shape[3];
Rectangle rect = new Rectangle();
shp[0] = new Shape();
shp[1] = rect;
shp[2] = new Square();
shp[0].Draw();
shp[1].Draw();
shp[2].Draw();
Console.WriteLine(Using without Polymorphism:);
rect.Draw();
Square sqr = new Square();
sqr.Draw();
}
}
Kt qu xut ra nh sau:
Using Polymorphism
Shape.Draw
Shape.Draw
Shape.Draw
Using without Polymorphism:
Rectangle.Draw
Square.Draw

Trong v d trn, phng thc Draw ca lp Rectangle khng phi l dng a hnh ca phng thc Draw trong lp
Shape. Thay v vy, n c xem nh l mt phng thc khc. Do , trnh s trng tn gia lp cha v lp con, ta

15 of 16

9/15/2008 5:12 PM

C# Fast Food

http://hoclaptrinh.vn/C-C++-Visual-C/C-Fast-Food/In.html

nn dng t kha new.


Lu : bn khng th dng hai phng thc cng tn trong cng mt lp nu mt phng thc dng t kha new,
phng thc kia dng override hay virtual.
Do trong lp Square, ti khng th override phng thc Draw ca lp Shape. Gi nhng member ca lp cha Nu
lp con c d liu member cng tn vi d liu trong lp cha, trnh b trng tn, d liu v hm member ca lp
cha c truy xut thng qua t kha base. Trong v d sau, hy xem cch constructor ca lp cha c gi v d liu
member c dng:

public Child(int val) :base(val)


{
myVar = 5;
base.myVar;
}

Hay
public Child(int val)
{
base(val);
myVar = 5 ;
base.myVar;
}
Bi vit ny ch gii thiu mt cch rt tng qut v ngn ng C# cc bn c th quen vi nhng c trng c bn ca
ngn ng. Mc d c gng cp n hu ht nhng khi nim chnh trong C#, nhng ti ngh vn cn rt nhiu th
khc cn thm vo v bn n.
(Theo: Trn Phm thanh Tng - Bo Hc Lp Trnh)
Ngun: tincntt.com

16 of 16

9/15/2008 5:12 PM

You might also like