Professional Documents
Culture Documents
CFastFood PDF
CFastFood PDF
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:
using System;
namespace MyNameSpace
{
class HelloWorld
{
static void Main(string[] args)
{
Console.WriteLine (Hello World);
}
}
}
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);
}
}
}
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#:
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;
5 of 16 9/15/2008 5:12 PM
C# Fast Food http://hoclaptrinh.vn/C-C++-Visual-C/C-Fast-Food/In.html
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.
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:
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:
----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
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)
{
....
}
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;
}
10 of 16 9/15/2008 5:12 PM
C# Fast Food http://hoclaptrinh.vn/C-C++-Visual-C/C-Fast-Food/In.html
---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:
----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:
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:
switch (var)
{
case 100:
case 200:
Console.WriteLine(100 or 200<VALUE is 200>);
break;
}
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:
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 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);
}
}
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
Hay
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.
16 of 16 9/15/2008 5:12 PM