You are on page 1of 212

http://vietjack.com/csharp/index.

jsp

Copyright vietjack.com

Mc lc
Hc C# c bn v nng cao ................................................................................................. 8
i vi c gi ...................................................................................................................... 8
iu kin tin ................................................................................................................... 8
Tng quan v C# .................................................................................................................. 8
Cc c im lp trnh mnh m ca C# .......................................................................... 9
Ci t mi trng C# .......................................................................................................... 9
Gii thiu .Net Framework .............................................................................................. 10
Integrated Development Environment (IDE) cho C# ....................................................... 10
Vit chng trnh C# trn Linux hoc Mac OS................................................................ 11
Cu trc chng trnh C# ................................................................................................... 11
To chng trnh Hello World trong C# .......................................................................... 11
Bin dch v thc thi chng trnh C# ............................................................................. 13
C php C# c bn ............................................................................................................ 14
T kha using trong C# .................................................................................................. 16
T kha class trong C#................................................................................................... 16
Comments trong C# ....................................................................................................... 16
Bin thnh vin trong C#................................................................................................. 16
Hm thnh vin trong C# ................................................................................................ 16
Thuyt minh mt Class trong C#..................................................................................... 16
nh danh (Identifier) trong C# ........................................................................................ 17
T kha trong C#............................................................................................................ 17
Kiu d liu trong C# .......................................................................................................... 18
Kiu gi tr trong C#......................................................................................................... 19
Kiu tham chiu trong C#................................................................................................ 21
Kiu object trong C# ............................................................................................... 21
Kiu Dynamic trong C# .......................................................................................... 21
Kiu string trong C# ................................................................................................ 22
http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 1

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Kiu con tr trong C# ...................................................................................................... 22


Chuyn i kiu trong C#.................................................................................................... 22
Phng thc chuyn i kiu trong C# .......................................................................... 23
Bin trong C#...................................................................................................................... 26
nh ngha bin trong C# ................................................................................................ 27
Khi to bin trong C# .................................................................................................... 27
Nhn gi tr t ngi dng trong C#................................................................................ 29
Biu thc lvalue v rvalue trong C#................................................................................. 29
Hng (Constant/Literal) trong C#......................................................................................... 29
Hng s nguyn trong C# ............................................................................................... 30
Hng s thc trong C#.................................................................................................... 31
Hng k t trong C#........................................................................................................ 31
Hng chui trong C#....................................................................................................... 33
nh ngha hng trong C# ............................................................................................... 33
Ton t trong C# ................................................................................................................ 34
Ton t s hc trong C# ................................................................................................. 34
Ton t quan h trong C#............................................................................................... 35
Ton t logic trong C# .................................................................................................... 36
Ton t so snh bit trong C#........................................................................................... 37
Ton t gn trong C#...................................................................................................... 40
Cc ton t hn hp trong C# ........................................................................................ 42
Th t u tin ton t trong C# ...................................................................................... 43
iu khin lung trong C#................................................................................................... 44
Ton t ? : trong C#........................................................................................................ 46
Vng lp trong C#............................................................................................................... 46
Cc lnh iu khin vng lp trong C#............................................................................ 47
Vng lp v hn trong C# ............................................................................................... 47
V d .......................................................................................................................... 48
Tnh ng gi trong C# ....................................................................................................... 48
http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 2

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Public Access Specifier trong C# .................................................................................... 49


Private Access Specifier trong C# ................................................................................... 50
Protected Access Specifier trong C# ............................................................................... 52
Internal Access Specifier trong C#................................................................................... 52
Protected Internal Access Specifier trong C#................................................................... 54
Phng thc trong C#........................................................................................................ 54
nh ngha phng thc trong C# .................................................................................. 54
V d ............................................................................................................................... 55
Gi phng thc trong C#.............................................................................................. 56
Gi phng thc qui trong C# ................................................................................... 58
Truyn tham s cho phng thc trong C#.................................................................... 59
Nullable trong C# ................................................................................................................ 60
Ton t ?? trong C#........................................................................................................ 61
Mng (Array) trong C# ........................................................................................................ 62
Khai bo mng trong C# ................................................................................................. 62
Khi to mng trong C#.................................................................................................. 63
Gn gi tr cho mt mng trong C# ................................................................................. 63
Truy cp cc phn t mng trong C#.............................................................................. 64
S dng vng lp foreach trong C# ................................................................................ 65
Chi tit v mng trong C#................................................................................................ 66
Chui (String) trong C# ....................................................................................................... 67
To mt i tng String trong C#.................................................................................. 67
Cc thuc tnh ca lp String trong C#............................................................................ 69
Phng thc ca lp String trong C# ............................................................................. 69
V d ............................................................................................................................... 74
Cu trc (Structure) trong C# .............................................................................................. 77
nh ngha cu trc trong C# .......................................................................................... 77
c im ca cu trc trong C#...................................................................................... 79
Phn bit Class v Structure trong C#............................................................................. 80
http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 3

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Enum trong C# ................................................................................................................... 82


Khai bo bin enum trong C# ......................................................................................... 82
V d ............................................................................................................................... 83
Lp (Class) trong C#........................................................................................................... 83
nh ngha mt Class trong C# ....................................................................................... 84
Hm thnh vin v tnh ng gi trong C# ...................................................................... 86
Constructor trong C#....................................................................................................... 88
Destructor trong C#......................................................................................................... 91
Thnh vin Static ca mt Class trong C#....................................................................... 92
Tnh k tha trong C#......................................................................................................... 95
Lp c s (Base Class) v Lp tha k (Derived Class) trong C# ................................. 95
Khi to Lp c s (Base Class) trong C# ..................................................................... 97
a k tha trong C# ....................................................................................................... 99
Tnh a hnh trong C# ....................................................................................................... 101
a hnh static trong C#.................................................................................................. 101
Np chng hm trong C#.............................................................................................. 102
a hnh dynamic trong C# ............................................................................................ 103
Np chng ton t trong C#.............................................................................................. 107
Trin khai Np chng ton t trong C# ......................................................................... 107
Ton t c th np chng v khng th np chng trong C#........................................ 110
V d ............................................................................................................................. 111
Interface trong C# ............................................................................................................. 117
Khai bo Interface trong C# .......................................................................................... 117
V d ............................................................................................................................. 117
Namespace trong C#........................................................................................................ 120
nh ngha mt Namespace trong C#........................................................................... 120
T kha using trong C# ................................................................................................ 121
Lng Namespace trong C#........................................................................................... 123
Ch th tin x l trong C# .................................................................................................. 125
http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 4

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Cc ch th tin x l trong C#........................................................................................ 125


Ch th tin x l #define trong C#.................................................................................. 126
Ch th c iu kin (Conditional Directive) trong C#....................................................... 127
Regular Expression trong C# ............................................................................................ 128
Construct cho nh ngha Regular Expression trong C# ................................................ 128
Lp Regex trong C# ..................................................................................................... 129
V d 1 .......................................................................................................................... 130
V d 2 .......................................................................................................................... 131
V d 3 .......................................................................................................................... 132
X l ngoi l (Exception Handling) trong C# .................................................................... 133
C php........................................................................................................................ 134
Lp Exception trong C# ................................................................................................ 135
X l ngoi l ( Exception Handling) trong C# ............................................................... 136
To User-Defined Exception trong C# .......................................................................... 137
Nm cc Object trong C#.............................................................................................. 139
File I/O trong C#................................................................................................................ 139
Lp I/O trong C# ........................................................................................................... 139
Lp FileStream trong C#............................................................................................... 140
V d ............................................................................................................................. 142
Hot ng File nng cao trong C# ................................................................................ 143
Attribute trong C# .............................................................................................................. 143
Xc nh mt Attribute trong C# .................................................................................... 144
Attribute c nh ngha trc trong C#...................................................................... 144
AttributeUsage trong C#................................................................................................ 144
Conditional trong C# ..................................................................................................... 145
Obsolete trong C#......................................................................................................... 147
To Custom Attribute trong C#...................................................................................... 148
Khai bo mt Custom Attribute trong C# ....................................................................... 149
Xy dng Custom Attribute trong C# ............................................................................ 149
http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 5

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

p dng Custom Attribute trong C# .............................................................................. 151


Reflection trong C# ........................................................................................................... 152
Cc ng dng ca Reflection........................................................................................ 152
Quan st Metadata trong C#......................................................................................... 153
V d ............................................................................................................................. 155
Thuc tnh (Property) trong C#.......................................................................................... 159
Accessor trong C# ........................................................................................................ 160
V d ............................................................................................................................. 161
Thuc tnh tru tng trong C# .................................................................................... 164
Indexer trong C# ............................................................................................................... 166
C php........................................................................................................................ 167
S s dng ca Indexer trong C#................................................................................. 167
Np chng Indexer trong C# ......................................................................................... 170
Delegate trong C#............................................................................................................. 173
Khai bo Delegate trong C#.......................................................................................... 173
Khi to Delegate trong C#........................................................................................... 173
Multicast mt Delegate trong C# ................................................................................... 175
Cch s dng Delegate trong C# ................................................................................. 177
S kin (Event) trong C# .................................................................................................. 178
S dng Delegate vi Event trong C# .......................................................................... 179
Khai bo Event trong C# ............................................................................................... 179
V d 1 .......................................................................................................................... 179
V d 2 .......................................................................................................................... 181
Collection trong C#............................................................................................................ 185
Cc lp Collection v cch s dng ca chng trong C# .............................................. 185
Generic trong C# .............................................................................................................. 186
c im ca Generic trong C#.................................................................................... 189
Cc phng thc Generic trong C# ............................................................................. 190
Generic Delegate trong C# ........................................................................................... 191
http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 6

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Phng thc nc danh trong C# ...................................................................................... 193


Vit mt Phng thc nc danh trong C# .................................................................... 193
V d ............................................................................................................................. 194
Unsafe code trong C#....................................................................................................... 195
Con tr (Pointer) trong C# ............................................................................................. 196
Thu hi gi tr d liu bi s dng con tr trong C# ....................................................... 197
Truyn Con tr nh l cc Tham s ti phng thc trong C#..................................... 198
Truy cp cc phn t mng bi s dng mt con tr trong C# ..................................... 199
Bin dch Unsafe Code trong C#................................................................................... 200
a lung (Multithread) trong C# ........................................................................................ 201
Vng i ca Thread trong C#...................................................................................... 201
Main Thread trong C#................................................................................................... 202
Thuc tnh v Phng thc ca lp Thread trong C#................................................... 203
To Thread trong C# .................................................................................................... 208
Qun l Thread trong C# .............................................................................................. 209
Hy Thread trong C# .................................................................................................... 210
Ti liu tham kho C# ....................................................................................................... 212
Link hu ch v C#........................................................................................................ 212

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 7

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Hc C# c bn v nng cao
C# l mt ngn ng lp trnh n gin, hin i, mc ch tng qut, hng i tng c pht
trin bi Microsoft bn trong phn khi u .NET ca h, c pht trin ch yu bi Anders
Hejlsberg, mt kin trc s phn mm ni ting vi cc sn phm Turbo Pascal, Delphi, J++, WFC.
Lot bi hng dn ny s cung cp cho bn kin thc c bn v lp trnh C# qua cc khi nim
t c bn n nng cao lin quan ti ngn ng lp trnh C#.
Lot bi hng dn ca chng ti da trn ngun ti liu ca: Tutorialspoint

i vi c gi
Lot bi hng dn ny c xy dng cho ngi mi hc gip h hiu cc khi nim c bn
v lp trnh C#.

iu kin tin
Ngn ng lp trnh C# l da trn cc ngn ng lp trnh C v C++, v th, nu bn hiu c bn
v C v C++, th iu ny s gip bn hc tp C# d dng hn.

Tng quan v C#
C# l mt ngn ng lp trnh n gin, hin i, mc ch tng qut, hng i tng c pht
trin bi Microsoft v c ph chun bi European Computer Manufacturers Association (ECMA)
v International Standards Organization (ISO).
C# c pht trin bi Anders Hejlsberg v team ca ng trong khi pht trin .Net Framework.
C# c thit k cho Common Language Infrastructure (CLI), m gm Executable Code v
Runtime Environment, cho php chng ta s dng cc ngn ng high-level a dng trn cc nn
tng v cu trc my tnh khc nhau.
Di y l cc l do lm C# l ngn ng lp trnh chuyn nghip c s dng rng ri:

N l mt ngn ng lp trnh hin i, mc ch tng qut.

N l hng i tng.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 8

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

N d dng hc.

N l mt ngn ng c cu trc.

N to cc chng trnh hiu qu.

N c th c bin dch trn nhiu nn tng my tnh khc nhau.

N l mt phn ca .Net Framework.

Cc c im lp trnh mnh m ca C#
Cu trc C# kh gn vi cc ngn ng high-level truyn thng, C v C++, v l mt ngn ng lp
trnh hng i tng. N c s ging nhau mnh m vi Java, n c nhiu c im lp trnh
mnh m m lm cho n tr nn a thch vi cc lp trnh vin trn ton th gii.
Di y l cc c im quan trng ca C#:

iu kin Boolean

T ng dn rc bi Garbage-Collector (GC)

Th vin chun (Standard Library)

Assembly

Property v s kin (Event)

Delegate Qun l s kin

D dng s dng Generic

Indexer

Bin dch c iu kin (Conditional Compilation)

a lung d dng (Multithreading)

LINQ v Lambda Expression

Tch hp vi Windows

Ci t mi trng C#
Trong chng ny, chng ti s gii thiu cc cng c cn thit ci t mi trng C#. Chng
ti cp rng C# l mt phn ca .Net Framework v c s dng vit cc ng dng
.Net. V th, trc khi tho lun v cc cng c c sn chy mt chng trnh C#, bn nn hiu
cch C# lin quan ti .Net Framework.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 9

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Gii thiu .Net Framework


.Net Framework l mt nn tng mang tnh cch mng gip bn vit cc kiu ng dng sau:

Windows application

Web application

Dch v Web

Cc ng dng .Net Framework l cc ng dng a nn tng. Nn tng c thit k theo cch


nh vy c th c s dng t bt k ngn ng lp trnh no: C#, C++, Visual Basic, Jscript,
COBOL, . Tt c cc ngn ng ny c th truy cp ti nn tng ny cng nh giao tip vi nhau.
.Net Framework gm mt th vin code khng l c s dng bi cc ngn ng client nh C#.
Di y l mt s thnh phn ca .Net Framework.

Common Language Runtime (CLR)

.Net Framework Class Library

Common Language Specification

Common Type System

Metadata v Assembly

Windows Form

ASP.Net v ASP.Net AJAX

ADO.Net

Windows Workflow Foundation (WF)

Windows Presentation Foundation

Windows Communication Foundation (WCF)

LINQ

Integrated Development Environment (IDE) cho C#


Microsoft cung cp cc cng c pht trin sau cho lp trnh C#:

Visual Studio 2010 (VS)

Visual C# 2010 Express (VCE)

Visual Web Developer

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 10

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Hai cng c sau l c sn v min ph ti Website chnh thc ca Microsoft. S dng cc tool ny,
bn c th vit tt c cc loi chng trnh C# t cc ng dng dng lnh n gin ti cc ng
dng phc tp hn. Bn cng c th vit cc tp source code ca C# bi s dng mt Text Editor
c bn, nh Notepad, v bin dch code vo trong Assembly bi s dng Command-line
Compiler, m l mt phn ca .Net Framework.
Trong lot bi ny, chng ti s dng Visual C# 2010 Express v bn c th ti n t:Microsoft
Visual Studio. N c ci t t ng trn my tnh ca bn.

Vit chng trnh C# trn Linux hoc Mac OS


Mc d .Net Framework chy trn H iu hnh Windows, nhng cng c mt s phin bn thay
th lm vic trn cc H iu hnh khc. Mono l mt phin bn m ngun m ca .Net
Framework m gm mt C# compiler v chy trn mt s H iu hnh, gm Linux v Mac OS.
Bn c th truy cp: Go Mono.
Mc ch ca Mono khng ch chy trn cc ng dng .Net trn Microsoft, m cn em li cng
c pht trin cho cc lp trnh vin Linux. Mono c th chy trn nhiu H iu hnh khc nhau,
nh Android, BSD, iOS, Linux, OS X, Windows, Solaris, v UNIX.

Cu trc chng trnh C#


Trc khi hc v cch xy dng cc khi ca ngn ng lp trnh C#, chng ta nn tm hiu cu
trc c bn chng trnh C#.

To chng trnh Hello World trong C#


Mt chng trnh C# gm cc phn sau:

Khai bo Namespace

Mt class

Phng thc ca lp

Thuc tnh ca lp

Mt phng thc Main

Lnh v biu thc

Comment

Bn theo di on code n gin sau s in Hello World:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 11

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

using System;
namespace HelloWorldApplication
{
class HelloWorld
{
static void Main(string[] args)
{
/* my first program in C# */
Console.WriteLine("Hello World");
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Hello World

Gi chng ta xem xt cc phn ca chng trnh trn:

Dng u tin using System;. T kha using c s dng bao Systemnamespace


trong chng trnh. Ni chung, mt chng trnh c nhiu lnh using.

Dng tip theo c khai bo namespace. Mt namespace l mt tp hp cc


lp.HelloWorldApplication namespace cha class HelloWorld.

Dng tip theo c mt khai bo class, class HelloWorld cha cc nh ngha d liu v
phng thc m chng trnh ca bn s dng. Ni chung, class cha nhiu phng
thc. Cc phng thc nh ngha hnh vi ca class. Tuy nhin, lpHelloWorld ch c mt
phng thc Main.

Dng tip theo nh ngha phng thc Main, m l entry point cho tt c chng trnh
C#. Phng thc Main biu din trng thi lp khi c thc thi.

Dng tip theo /**/ b b qua bi compiler v n l comment cho chng trnh.

Phng thc Main xc nh hnh vi ca n vi lnh Console.WriteLine("Hello World");

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 12

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

WriteLine l mt phng thc ca lp Console c nh ngha trong System namespace.


Lnh ny lm thng bo Hello, World! c hin th trn mn hnh.

Dng cui cng Console.ReadKey(); l cho VS.NET Users. N lm chng trnh i cho
mt phm c nhn v n ngn cn mn hnh chy v ng mt cch nhanh chng khi
chng trnh c pht ng t Visual Studio.Net.

Bn nn ghi nh cc im sau:

C# l phn bit kiu ch (case sensitive).

Tt c lnh v biu thc phi kt thc vi mt du chm phy (;).

S thc thi chng trnh bt u ti phng thc Main.

Khng ging Java, tn file chng trnh c th khc tn lp.

Bin dch v thc thi chng trnh C#


Nu bn ang s dng Visual Studio.Net bin dch v thc thi cc chng trnh C#, bn theo
cc bc sau:

Bt u Visual Studio.

Trn thanh menu, chn File -> New -> Project.

Chn Visual C# t cc Template, v sau chn Windows.

Chn Console Application.

Xc nh tn cho project v nhn nt OK.

iu ny to New Project trong Solution Explorer.

Vit code trong Code Editor.

Nhn nt Run hoc nhn phm F5 thc thi project. Mt ca s Command Prompt xut
hin m cha dng Hello World.

Bn c th bin dch mt chng trnh C# bi s dng command-line thay cho Visual Studio IDE:

M mt Text Editor v thm code trn vo.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 13

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Lu tp di dng helloworld.cs

M cng c Command Prompt tool v ti th mc ni bn lu file .

Son csc helloworld.cs v nhn Enter bin dch code ca bn.

Nu khng c li no trong code, th Command prompt a bn ti dng tip theo v to


tp helloworld.exe c th thc thi (executable).

Son helloworld thc thi chng trnh ca bn.

Bn c th thy output l Hello World c in trn mn hnh.

C php C# c bn
C# l mt ngn ng lp trnh hng i tng. Trong phng php lp trnh hng i tng, mt
chng trnh gm cc i tng a dng m tng tc vi nhau cc cch thc ca action. Cc
action m mt i tng c th nhn c gi l cc phng thc. Cc i tng cng loi c
xem nh l c cng kiu hoc, c xem nh l trong cng lp.
V d, xt i tng Rectangle. N c cc thuc tnh nh length v width. Ph thuc vo thit k
trn. N c th cn nhng cch cp nhn cc gi tr ca thuc tnh ny, tnh ton din tch v
hin th chi tit.
Bn theo di v d sau trin khai mt lp Rectangle v c php C# c bn ca chng trnh ny:
using System;
namespace RectangleApplication
{
class Rectangle
{
// member variables
double length;
double width;
public void Acceptdetails()
{
length = 4.5;
width = 3.5;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 14

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

public double GetArea()


{
return length * width;
}

public void Display()


{
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}

class ExecuteRectangle
{
static void Main(string[] args)
{
Rectangle r = new Rectangle();
r.Acceptdetails();
r.Display();
Console.ReadLine();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Length: 4.5
Width: 3.5
Area: 15.75

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 15

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

T kha using trong C#


Lnh u tin trong bt k chng trnh C# no l:
using System;

T kha using c s dng bao namespace trong chng trnh. Mt chng trnh C# c th
bao nhiu lnh using.

T kha class trong C#


T kha class c s dng khai bo mt lp trong C#.

Comments trong C#
Comment c s dng thuyt minh code. Compiler b qua cc comment. Cc comment a
dng trong cc chng trnh C# bt u vi /* v kt thc vi */ nh sau:
/* This program demonstrates
The basic syntax of C# programming
Language */

Comment n dng c ch dn bi k hiu //. V d:


}//end class Rectangle

Bin thnh vin trong C#


Cc bin l cc thuc tnh hoc thnh vin d liu ca mt lp, c s dng lu gi d liu.
Trong chng trnh trc , lp Rectangle c hai bin thnh vin l length v width.

Hm thnh vin trong C#


Hm l tp hp cc lnh m thc hin mt tc v c th. Cc hm thnh vin ca mt lp c
khai

bo

bn

trong

lp

Lp

Rectangle

cha

hm

thnh

vin

l: AcceptDetails,GetArea v Display.

Thuyt minh mt Class trong C#


Trong chng trnh trn, lp ExecuteRectangle cha phng thc Main() v thuyt minh
lpRectangle.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 16

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

nh danh (Identifier) trong C#


Mt nh danh l mt tn c s dng nhn din mt lp, bin, hm hoc bt k mc t nh
ngha (user-defined).

Mt tn phi bt u vi mt ch ci m c th c theo sau bi mt dy cc ch ci, k


s (0-9) hoc du gch di (_). K t u tin ca mt nh danh khng th l mt k s.

N phi khng cha bt k khong trng hoc k t nh ? - + ! @ # % ^ & * ( ) [ ] { } . ; : " ' /


v \. Tuy nhin, du gch di c th c s dng.

N khng nn l mt t kha trong C#.

T kha trong C#
T kha l cc t dnh ring (Reserved Keyword) c nh ngha trc cho C# compiler. Nhng
t kha ny khng th c s dng lm nh danh. Tuy nhin, nu bn mun s dng cc t
kha ny lm nh danh, bn c th t k t @ trc chng.
Trong C#, mt s nh danh c ngha c bit trong ng cnh ca code, v d nh get v set
c gi l cc contextual keyword (t kha thuc ng cnh).
Bng sau lit k cc t kha dnh ring v cc t kha thuc ng cnh trong C#:
Reserved Keyword

abstract

as

base

bool

break

byte

case

catch

char

checked

class

const

continue

decimal

default

delegate

do

double

else

enum

event

explicit

extern

false

finally

fixed

float

for

foreach

goto

if

implicit

in

in (generic
modifier)

int

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 17

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

interface

internal

is

lock

long

namespace

new

null

object

operator

out

out (generic
modifier)

override

params

private

protected

public

readonly

ref

return

sbyte

sealed

short

sizeof

stackalloc

static

string

struct

switch

this

throw

true

try

typeof

uint

ulong

unchecked

unsafe

ushort

using

virtual

void

volatile

while

Contextual Keyword trong C#

add

alias

ascending

descending

dynamic

from

get

global

group

into

join

let

orderby

partial
(type)

partial
(method)

remove

select

set

Kiu d liu trong C#


Cc bin trong C# c phn chia thnh cc kiu sau:

Kiu gi tr (Value type)

Kiu tham chiu (Reference type)

Kiu con tr (Pointer type)

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 18

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Kiu gi tr trong C#
Cc bin kiu gi tr c th c gn mt gi tr mt cch trc tip. Chng c k tha t
lp System.ValueType.
Kiu gi tr trc tip cha d liu. Mt s v d l int, char, v float, tng ng gi s nguyn, ch
ci, v s thc. Khi bn khai bo mt kiu int, h thng cp pht b nh lu gi tr .
Bng sau lit k cc kiu gi tr c sn trong C# 2010:
Kiu

Biu din

Dy gi tr

Gi tr
mc
nh

bool

Gi tr Boolean

True hoc False

False

byte

Kiu unsigned integer


(8 bit)

0 ti 255

char

Kiu Unicode
character (16 bit)

U +0000 ti U +ffff

'\0'

decimal

Kiu thp phn (128


bit)

(-7.9 x 1028 ti 7.9 x 1028) / 100 to 28

0.0M

double

Kiu double (64 bit)

(+/-)5.0 x 10-324 ti (+/-)1.7 x 10308

0.0D

float

Kiu float (32 bit)

-3.4 x 1038 ti + 3.4 x 1038

0.0F

int

Kiu integer (32 bit)

-2,147,483,648 ti 2,147,483,647

long

Kiu signed integer (64


bit)

-9,223,372,036,854,775,808 ti
9,223,372,036,854,775,807

0L

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 19

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

sbyte

Kiu signed integer (8


bit)

-128 ti 127

short

Kiu signed integer (16


bit)

-32,768 ti 32,767

uint

Kiu unsigned integer


(32 bit)

0 ti 4,294,967,295

ulong

Kiu unsigned integer


(64 bit)

0 ti 18,446,744,073,709,551,615

ushort

Kiu unsigned integer


(16 bit)

0 ti 65,535

ly kch c chnh xc ca mt kiu hoc mt bin trn mt nn tng c th, bn c th s dng


phng thc sizeof. Biu thc sizeof(type) hin th kch c ca i tng hoc kiu bng gi tr
byte. V d di y ly kch c ca kiu int trn bt k my tnh:
using System;
namespace DataTypeApplication
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Size of int: {0}", sizeof(int));
Console.ReadLine();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Size of int: 4

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 20

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Kiu tham chiu trong C#


Kiu tham chiu khng cha d liu thc s c lu gi trong mt bin, nhng chng cha mt
tham chiu ti cc bin.
Ni cch khc, chng tham chiu ti mt v tr b nh. Vic s dng nhiu bin, th kiu tham chiu
c th tham chiu ti ti mt v tr b nh. Nu d liu trong v tr b nh b thay i bi mt trong
s cc bin, th bin khc t ng phn nh s thay i v gi tr ny. V d cc kiu tham chiu c
sn trong C# l: object, dynamic, v string.

Kiu object trong C#


Kiu object l lp c s c bn cho tt c kiu d liu trong C# Common Type System (CTS).
Object l mt alias cho lp System.Object. Cc kiu object c th c gn gi tr ca bt k kiu,
kiu gi tr, kiu tham chiu, kiu t nh ngha (user-defined) khc. Tuy nhin, trc khi gn cc
gi tr, n cn mt s chuyn i kiu.
Khi mt kiu gi tr c chuyn i thnh kiu object, n c gi l boxing v ngc li, khi mt
kiu object c chuyn i thnh kiu gi tr, n c gi l unboxing.
object obj;
obj = 100; // this is boxing

Kiu Dynamic trong C#


Bn c th lu gi bt k kiu gi tr no trong bin kiu d liu dynamic. Vic kim tra cc kiu
bin ny din ra ti run time.
C php khai bo mt kiu dynamic trong C# l:
dynamic <variable_name> = value;

V d
dynamic d = 20;

Kiu dynamic l tng t vi kiu object, ngoi tr vic kim tra cho cc bin kiu object din ra ti
compile time, trong khi vic kim tra cc bin kiu dynamic din ra ti run time.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 21

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Kiu string trong C#


Kiu string trong C# cho php bn gn bt k gi tr chui no cho mt bin. Kiu string l
mt alias cho lp System.String. N k tha t kiu object. Gi tr cho mt kiu string c th c
gn bi s dng cc hng chui trong hai mu: quoted v @quoted.
V d:
String str = "Tutorials Point";

V mt hng chui @quoted trng nh sau:


@"Tutorials Point";

Cc kiu t nh ngha (user-defined) trong C# l: Class, Interface, hoc Delegate. Chng ta s


bn v cc kiu ny trong cc chng sau.

Kiu con tr trong C#


Cc bin kiu con tr lu gi a ch b nh ca kiu khc. Cc con tr trong C# c kh nng nh
con tr trong C hoc C++.
C php khai bo mt kiu con tr trong C# l:
type* identifier;

V d:
char* cptr;
int* iptr;

Chng ta s tho lun v kiu con tr chng: Unsafe Code trong C#.

Chuyn i kiu trong C#


Chuyn i kiu trong C# l bin i mt kiu d liu ny thnh kiu d liu khc. N cn c gi
l p kiu. Trong C#, p kiu c hai mu sau:

Chuyn i kiu ngm nh (implicit) - Vic chuyn i ny c thc hin bi C# theo


mt phng thc an ton kiu (type-safe). V d: vic chuyn i t cc lp k tha thnh
cc lp c s.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 22

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Chuyn i kiu tng minh (explicit) - Vic chuyn i ny c thc hin mt cch r
rng bi ngi dng bng vic s dng cc hm c nh ngha trc. Cc chuyn i
kiu tng minh cn mt ton t cast.

V d sau minh ha mt s chuyn i kiu tng minh trong C#:


using System;
namespace TypeConversionApplication
{
class ExplicitConversion
{
static void Main(string[] args)
{
double d = 5673.74;
int i;

// cast double to int.


i = (int)d;
Console.WriteLine(i);
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


5673

Phng thc chuyn i kiu trong C#


C# cung cp cc phng thc chuyn i kiu c sn c lit k trong bng sau:
STT

Phng thc & Miu t

ToBoolean

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 23

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Chuyn i mt kiu thnh mt gi tr Boolean, nu c th

ToByte
Chuyn i mt kiu thnh mt byte

ToChar
Chuyn i mt kiu thnh mt Unicode character, nu c th

ToDateTime
Chuyn i mt kiu (kiu integer hoc string) thnh cc cu trc date-time

ToDecimal
Chuyn i mt kiu s thc hoc s nguyn thnh mt kiu thp phn

ToDouble
Chuyn i mt kiu thnh mt kiu double

ToInt16
Chuyn i mt kiu thnh mt 16-bit integer

ToInt32
Chuyn i mt kiu thnh mt 32-bit integer

ToInt64
Chuyn i mt kiu thnh mt 64-bit integer

10

ToSbyte
Chuyn i mt kiu thnh mt kiu signed byte

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 24

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

ToSingle

11

Chuyn i mt kiu thnh mt s small floating point

ToString

12

Chuyn i mt kiu thnh mt string

ToType

13

Chuyn i mt kiu thnh mt kiu xc nh

ToUInt16

14

Chuyn i mt kiu thnh mt kiu unsigned int

ToUInt32

15

Chuyn i mt kiu thnh mt kiu unsigned long

ToUInt64

16

Chuyn i mt kiu thnh mt unsigned big integer


V d sau minh ha cch chuyn i cc kiu a dng thnh kiu string trong C#:
using System;
namespace TypeConversionApplication
{
class StringConversion
{
static void Main(string[] args)
{
int i = 75;
float f = 53.005f;
double d = 2345.7652;
bool b = true;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 25

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Console.WriteLine(i.ToString());
Console.WriteLine(f.ToString());
Console.WriteLine(d.ToString());
Console.WriteLine(b.ToString());
Console.ReadKey();

}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


75
53.005
2345.7652
True

Bin trong C#
Mt bin l khng g khc ngoi mt tn c cung cp cho khu vc lu gi m chng trnh c
th thao tc. Mi bin trong C# c mt kiu c th, m quyt nh kch c v cch b tr b nh ca
bin , cch dy gi tr c th c lu gi trong b nh , v cch tp hp cc hot ng c
th c p dng ti bin .
Cc kiu gi tr c bn trong C# c th c phn chia thnh:
Kiu

V d

Kiu Integral

sbyte, byte, short, ushort, int, uint, long, ulong, v char

Kiu Floating point

float v double

Kiu Decimal

decimal

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 26

http://vietjack.com/csharp/index.jsp
Kiu Boolean

true hoc false, as assigned

Kiu Nullable

Kiu d liu Nullable

Copyright vietjack.com

C# cng cho php nh ngha cc kiu gi tr khc ca bin nh kiu enum v cc kiu tham chiu
ca bin nh class, s c bn lun trong cc chng ti.

nh ngha bin trong C#


C php nh ngha bin trong C# l:
<data_type> <variable_list>;

y, data_type phi l mt kiu d liu hp l trong C#, gm: char, int, double hoc bt k kiu
d liu t nh ngha (user-defined) no v variable_list c th cha mt hoc nhiu tn nh danh
c phn bit bi du phy.
Di y l mt s nh ngha bin hp l trong C#:
int i, j, k;
char c, ch;
float f, salary;
double d;

Bn c th khi to mt bin ti thi im nh ngha, nh sau:


int i = 100;

Khi to bin trong C#


Bin c khi to (c gn mt gi tr) vi mt du bng c theo sau bi mt biu thc
hng. Form chung cho khi to bin trong C# l:
variable_name = value;

Cc bin c th c khi to trong khai bo ca chng. Phn khi to gm mt du bng c


theo sau bi mt biu thc hng, nh sau:
<data_type> <variable_name> = value;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 27

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Mt s v d v khi to bin trong C# l:


int d = 3, f = 5;

/* initializing d and f. */

byte z = 22;

/* initializes z. */

double pi = 3.14159; /* declares an approximation of pi. */


char x = 'x';

/* the variable x has the value 'x'. */

Vic khi to bin mt cch chnh xc l mt bi thc hnh tt cho bn, nu khng th chng
trnh c th to ra kt qu khng mong i.
V d sau s dng cc kiu bin a dng trong C#:
using System;
namespace VariableDefinition
{
class Program
{
static void Main(string[] args)
{
short a;
int b ;
double c;

/* actual initialization */
a = 10;
b = 20;
c = a + b;
Console.WriteLine("a = {0}, b = {1}, c = {2}", a, b, c);
Console.ReadLine();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 28

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

a = 10, b = 20, c = 30

Nhn gi tr t ngi dng trong C#


Lp Console trong System namespace cung cp hm ReadLine() nhn u vo t ngi
dng v lu n vo trong mt bin.
V d:
int num;
num = Convert.ToInt32(Console.ReadLine());

Hm Convert.ToInt32() chuyn i d liu nhp bi ngi dng thnh kiu d liu int, bi
v Console.ReadLine() chp nhn d liu trong nh dng chui.

Biu thc lvalue v rvalue trong C#


C hai loi biu thc trong C#:

lvalue: Mt biu thc m l mt lvalue c th xut hin hoc bn tri hoc bn phi ca
php gn trong C#.

rvalue: Mt biu thc m l mt rvalue c th xut hin bn phi nhng khng th bn


tri ca mt php gn trong C#.

Cc bin l lvalue v v th chng c th xut hin bn tri ca mt php gn. Cc hng s l


rvalue v v th chng khng th c gn v khng th xut hin bn tri ca mt php gn.
Sau y l mt lnh hp l trong C#:
int g = 20;

Nhng lnh sau l khng hp l v s to mt Compile-time error trong C#:


10 = 20;

Hng (Constant/Literal) trong C#


Constant lin quan ti cc gi tr c nh m chng trnh khng th thay i trong khi thc thi.
Nhng gi tr c nh ny cng c gi l literal.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 29

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Constant l mt kiu d liu thay th cho Literal, cn Literal th hin chnh n. Trong v d: const PI
= 3.14 th Constant y l PI, cn Literal l 3.14.
Constant c th l bt k kiu d liu c bn no trong C#, v c th c phn chia thnh gi tr
hng s nguyn, hng s thc, hng k t, hng chui v Boolean literal (tm dch: hng logic).
Ngoi ra, C# cng c cc kiu hng lit k.
Ngoi ra, constant c i x ging nh cc bin thng thng, ngoi tr vic gi tr ca chng
l khng th thay i sau khi nh ngha.

Hng s nguyn trong C#


Hng s nguyn c th l decimal (c s 10), octal (c s 8) hay hexadecimal (c s 16). Gi tr
c tin t (prefix) l 0 cho octal, l 0x hay 0X cho hexadecimal v khng c g cho decimal.
Mt hng s nguyn cng c cc hu t (suffix) U hay L th hin kiu unsigned hay long. Hu t c
th l ch hoa hoc ch thng v c th trong bt k th t no.
V d v cc hng s nguyn:
212

/* Legal */

215u

/* Legal */

0xFeeL

/* Legal */

078

/* Illegal: 8 is not an octal digit */

032UU

/* Illegal: cannot repeat a suffix */

Di y l cc kiu hng s nguyn a dng:


85

/* decimal */

0213

/* octal */

0x4b

/* hexadecimal */

30

/* int */

30u

/* unsigned int */

30l

/* long */

30ul

/* unsigned long */

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 30

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Hng s thc trong C#


Mt hng s thc bao gm phn nguyn (integer part), du chm thp phn (decimal point), phn
l (fraction part) v phn m (exponent part). Chng ta c th biu din hng s thc theo dng
decimal hay dng m.
Xt cc v d sau:
3.14159

/* Legal */

314159E-5L

/* Legal */

510E

/* Illegal: incomplete exponent */

210f

/* Illegal: no decimal or exponent */

.e55

/* Illegal: missing integer or fraction */

Khi th hin dng decimal phi bao gm du chm thp phn, phn m hoc c hai. Khi th hin
dng m phi gm phn nguyn, phn l hoc c hai. Dng m i km vi k t E hoc e.

Hng k t trong C#
Cc hng k t trong C# m u v kt thc bi du nhy n. Nu hng k t bt u vi L (v
d Lx) th n l kiu wchar_t. Nu khng th, n l hng k t kiu char, v d nh x.
Hng k t c th l mt k t (nh X), mt escape sequence (nh \t) hay mt k t m rng (nh
\u02c0).
Mt s k t trong C# khi c ng trc bi du \ th chng s mang mt ngha c bit nh
bt u dng mi \n hay to mt tab \t. Chng c bit nh l escape sequence (dy thot).
Bng di y th hin mt s m escape sequence ph bin:
Dy thot

ngha

\\

K t \

\'

K t '

\"

K t "

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 31

http://vietjack.com/csharp/index.jsp
\?

K t ?

\a

Ting chung

\b

Backspace

\f

Form feed

\n

Dng mi

\r

Carriage return

\t

tab ngang

\v

tab dc

\ooo

S trong c s 8 ca 1 n 3 k s

\xhh . . .

S thp lc phn ca mt hoc nhiu k s

Copyright vietjack.com

Sau y l v d ch mt s k t dy thot:
using System;
namespace EscapeChar
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello\tWorld\n\n");
Console.ReadLine();
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 32

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Hello

World

Hng chui trong C#


Hng chui cha trong du nhy kp, v d abc. Mt chui s cha cc k t tng t hng k
t, gm cc k t thun, escape sequence, v cc k t m rng.
C th ngt mt dng di thnh nhiu dng bi s dng hng chui v phn bit chng bi s
dng khong trng (whitespace).
Xt v d mt hng chui trong C# th hin theo 3 cch khc nhau:
"hello, dear"
"hello, \
dear"
"hello, " "d" "ear"
@"hello dear"

nh ngha hng trong C#


Hng trong C# c nh ngha bi s dng t kha const. C php nh ngha mt hng l:
const <data_type> <constant_name> = value;

Chng trnh sau minh ha cch nh ngha v s dng mt hng trong chng trnh C# ca bn:
using System;
namespace DeclaringConstants
{
class Program
{
static void Main(string[] args)
{
const double pi = 3.14159;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 33

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

// constant declaration
double r;
Console.WriteLine("Enter Radius: ");
r = Convert.ToDouble(Console.ReadLine());
double areaCircle = pi * r * r;
Console.WriteLine("Radius: {0}, Area: {1}", r, areaCircle);
Console.ReadLine();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Enter Radius:
3
Radius: 3, Area: 28.27431

Ton t trong C#
Mt ton t l mt biu tng, m ni cho compiler thc hin cc thao tc ton hc v logic c th.
C# cung cp nhiu ton t c sn, l:

Ton t s hc

Ton t quan h

Ton t logic

Ton t so snh bit

Ton t gn

Ton t hn hp

Ton t s hc trong C#
Bng di lit k cc ton t s hc c h tr bi ngn ng C#. Gi s bin A gi gi tr 10,
bin B gi 20 th:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 34

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

V d
Ton
t

Miu t

V d

Thm hai ton hng

A + B s cho kt qu l 30

Tr gi tr ton hng hai t ton hng u

A - B s cho kt qu l -10

Nhn hai ton hng

A * B s cho kt qu l 200

Chia ly phn nguyn hai ton hng

B / A s cho kt qu l 2

Chia ly phn d

B % A s cho kt qu l 0

++

Lng gia gi tr ton hng thm 1 n v

A++ s cho kt qu l 11

--

Lng gim gi tr ton hng mt n v

A-- s cho kt qu l 9

Ton t quan h trong C#


Bng di y lit k cc ton t quan h c h tr bi ngn ng C#. Gi s bin A gi gi tr
10, bin B gi 20 th:
V d
Ton
t

Miu t

V d

==

Kim tra nu 2 ton hng bng nhau hay khng. Nu bng th iu kin l
true.

(A ==
B) l
khng
ng.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 35

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

!=

Kim tra 2 ton hng c gi tr khc nhau hay khng. Nu khng bng th
iu kin l true.

(A !=
B) l
true.

>

Kim tra nu ton hng bn tri c gi tr ln hn ton hng bn phi hay


khng. Nu ln hn th iu kin l true.

(A >
B) l
khng
ng.

<

Kim tra nu ton hng bn tri nh hn ton hng bn phi hay khng. Nu
nh hn th l true.

(A <
B) l
true.

>=

Kim tra nu ton hng bn tri c gi tr ln hn hoc bng gi tr ca ton


hng bn phi hay khng. Nu ng l true.

(A >=
B) l
khng
ng.

<=

Kim tra nu ton hng bn tri c gi tr nh hn hoc bng ton hng bn


phi hay khng. Nu ng l true.

(A <=
B) l
true.

Ton t logic trong C#


Bng di y ch r tt c cc ton t logic c h tr bi ngn ng C#. Gi s bin A c gi tr
1 v bin B c gi tr 0:
V d
Ton
t

Miu t

V
d

&&

c gi l ton t logic AND (v). Nu c hai ton t u c gi tr khc 0


th iu kin tr ln true.

(A
&&
B) l
false.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 36

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

||

c gi l ton t logic OR (hoc). Nu mt trong hai ton t khc 0, th


iu kin l true.

(A ||
B) l
true.

c gi l ton t NOT (ph nh). S dng o ngc li trng thi


logic ca ton hng . Nu iu kin ton hng l true th ph nh n s l
false.

!(A
&&
B) l
true.

Ton t so snh bit trong C#


Ton t so snh bit lm vic trn n v bit, tnh ton biu thc so snh tng bit. Bng di y v
&, |, v ^ nh sau:
p

p&q

p|q

p^q

Gi s nu A = 60; v B = 13; th by gi trong nh dng nh phn chng s l nh sau:


A = 0011 1100
B = 0000 1101
----------------A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 37

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

~A = 1100 0011
Cc ton t so snh bit c h tr bi ngn ng C# c lit k trong bng di y. Gi s ta
c bin A c gi tri 60 v bin B c gi tr 13, ta c:
V d
Ton
t

Miu t

V d

&

Ton t AND (v) nh phn sao chp mt bit ti kt qu nu n tn ti trong


c hai ton hng.

(A &
B) s
cho
kt
qu
l 12,
tc l
0000
1100

Ton t OR (hoc) nh phn sao chp mt bit ti kt qu nu n tn ti trong


mt hoc hai ton hng.

(A |
B) s
cho
kt
qu
l 61,
tc l
0011
1101

Ton t XOR nh phn sao chp bit m n ch tn ti trong mt ton hng m


khng phi c hai.

(A ^
B) s
cho
kt
qu
l 49,
tc l
0011
0001

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 38

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Ton t o bit (o bit 1 thnh bit 0 v ngc li).

(~A )
s
cho
kt
qu
l 61,
tc l
1100
0011.

<<

Ton t dch tri. Gi tr ton hng tri c dch chuyn sang tri bi s cc
bit c xc nh bi ton hng bn phi.

A <<
2 s
cho
kt
qu
240,
tc l
1111
0000
(dch
sang
tri
hai
bit)

>>

Ton t dch phi. Gi tr ton hng tri c dch chuyn sang phi bi s
cc bit c xc nh bi ton hng bn phi.

A >>
2 s
cho
kt
qu
l 15,
tc l
0000
1111
(dch
sang
phi
hai
bit)

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 39

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Ton t gn trong C#
y l nhng ton t gn c h tr bi ngn ng C#:
V d
Ton
t

Miu t

V d

Ton t gn n gin. Gn gi tr ton hng bn phi cho ton hng tri.

C=A
+ B s
gn
gi tr
ca A
+B
vo
trong
C

+=

Thm gi tr ton hng phi ti ton hng tri v gn gi tr cho ton


hng tri.

C +=
A
tng
ng
vi C
=C+
A

-=

Tr i gi tr ton hng phi t ton hng tri v gn gi tr ny cho ton


hng tri.

C -= A
tng
ng
vi C
=CA

*=

Nhn gi tr ton hng phi vi ton hng tri v gn gi tr ny cho ton


hng tri.

C *= A
tng
ng
vi C
=C*
A

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 40

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

/=

Chia ton hng tri cho ton hng phi v gn gi tr ny cho ton hng tri.

C /= A
tng
ng
vi C
=C/
A

%=

Ly phn d ca php chia ton hng tri cho ton hng phi v gn cho
ton hng tri.

C %=
A
tng
ng
vi C
=C%
A

<<=

Dch tri ton hng tri sang s v tr l gi tr ton hng phi.

C <<=
2
tng
ng
vi C
=C
<< 2

>>=

Dch phi ton hng tri sang s v tr l gi tr ton hng phi.

C >>=
2
tng
ng
vi C
=C
>> 2

&=

Php AND bit

C &=
2
tng
ng
vi C
=C&
2

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 41

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

^=

Php OR loi tr bit

C ^= 2
tng
ng
vi C
=C^
2

|=

Php OR bit.

C |= 2
tng
ng
vi C
=C|2

Cc ton t hn hp trong C#
Di y l mt s ton t hn hp quan trng gm sizeof, typeof v ? : c h tr bi ngn
ng C#.
V d
Ton
t

Miu t

V d

sizeof()

Tr v kch c ca mt kiu d liu

sizeof(int), tr v 4

typeof()

Tr v kiu ca mt lp

typeof(StreamReader);

&

Tr v a ch ca mt bin

&a; tr v a ch thc
s ca bin

Tr ti mt bin

*a; to con tr vi tn
l a ti mt bin

?:

Biu thc iu kin (Conditional Expression)

Nu Condition l true
? Th gi tr X : Nu
khng th Y

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 42

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

is

Xc nh i tng l mt kiu c th hay khng

If( Ford is Car) // Kim


tra nu Ford l mt i
tng ca lp Car

as

p kiu m khng to mt exception nu vic p kiu tht


bi

Object obj = new


StringReader("Hello");
StringReader r = obj
as StringReader;

Th t u tin ton t trong C#


Th t u tin ton t trong C# xc nh cch biu thc c tnh ton. V d, ton t nhn c
quyn u tin hn ton t cng, v n c thc hin trc.
V d, x = 7 + 3 * 2; y, x c gn gi tr 13, ch khng phi 20 bi v ton t * c quyn u
tin cao hn ton t +, v th u tin n thc hin php nhn 3 * 2 v sau thm vi 7.
Bng di y lit k th t u tin ca cc ton t. Cc ton t vi quyn u tin cao nht xut
hin trn cng ca bng, v cc ton t c quyn u tin thp nht th bn di cng ca bng.
Trong mt biu thc, cc ton t c quyn u tin cao nht c tnh ton u tin.
V d
Loi

Ton t

Th t u tin

Postfix

() [] -> . ++ - -

Tri sang phi

Unary

+ - ! ~ ++ - - (type)* & sizeof

Phi sang tri

Tnh nhn

*/%

Tri sang phi

Tnh cng

+-

Tri sang phi

Dch chuyn

<< >>

Tri sang phi

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 43

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Quan h

< <= > >=

Tri sang phi

Cn bng

== !=

Tri sang phi

Php AND bit

&

Tri sang phi

Php XOR bit

Tri sang phi

Php OR bit

Tri sang phi

Php AND logic

&&

Tri sang phi

Php OR logic

||

Tri sang phi

iu kin

?:

Phi sang tri

Gn

= += -= *= /= %=>>= <<= &= ^= |=

Phi sang tri

Du phy

Tri sang phi

iu khin lung trong C#


Cc cu trc iu khin lung yu cu lp trnh vin xc nh mt hoc nhiu iu kin c
nh gi v kim tra bi chng trnh, cng vi cc lnh c thc hin nu iu kin c xc
nh l ng, hoc cc lnh khc c thc hin nu iu kin xc nh l sai.
Di y l mu chung ca mt cu trc iu khin lung hay gp trong ngn ng lp trnh.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 44

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

C# cung cp cc loi lnh iu khin lung sau. Bn nhn vo link thy chi tit.
Lnh

Miu t

Lnh if trong C#

Mt lnh if bao gm mt biu thc logic theo sau bi mt


hoc nhiu lnh khc.

Lnh if...else trong C#

Mt lnh if c th theo sau bi mt lnh else (ty : c


hoc khng), m c th c thc hin khi biu thc
logic c gi tr false.

Lng cc lnh if trong C#

Bn c th s dng lnh if hoc lnh else if bn trong


lnh if hoc else if khc

Lnh switch trong C#

Lnh switch cho php kim tra iu kin ca mt bin


trc khi thc thi cc lnh

Lng cc lnh switch trong C#

Bn c th s dng mt lnh switch bn trong mt


lnhswitch khc

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 45

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Ton t ? : trong C#
Chng ta bn v ton t iu kin ? : trong chng trc m c th c dng thay th
cho lnh if...else. N c mu chung nh sau:
Exp1 ? Exp2 : Exp3;

Trong Exp1, Exp2 v Exp3 l cc biu thc. Ch vic s dng v t ca du hai chm.
Gi tr ca biu thc Exp1 trc du ? c gi tr true, Exp2 c thc hin, v gi tr ca n l gi
tr ca biu thc. Nu Exp1 l false th Exp3 c thc hin v gi tr ca n l gi tr ca biu
thc.

Vng lp trong C#
C mt tnh hung m bn cn phi thc hin mt on code mt vi ln. Nhn chung, cc cu
lnh c thc hin mt cch tun t. Cu lnh u tin ca hm c thc hin trc, sau
n cu th 2 v tip tc.
Ngn ng lp trnh cung cp cho chng ta nhiu cu trc iu khin v cho php bn thc hin
nhng phn phc tp.
Vng lp cho php thc hin mt lnh v mt nhm lnh nhiu ln , di y l dng tng qut:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 46

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

C# h tr nhng lnh iu khin sau y. Click chut vo link xem chi tit.
Kiu vng lp

Miu t

Lp li mt hoc mt nhm cc lnh trong khi iu kin


cho l ng. N kim tra iu kin trc khi thc hin thn
vng lp.

Vng lp while trong C#

Vng lp for trong C#

Thc thi mt dy cc lnh nhiu ln v tm tt on code


m qun l bin vng lp.

Vng lp do...while trong C#

Ging lnh while, ngoi tr im l n kim tra iu kin


cui thn vng lp.

Lng cc vng lp trong C#

Bn c th s dng mt hoc nhiu vng lp trong cc vng


lp while, for hoc do..while khc.

Cc lnh iu khin vng lp trong C#


Cc lnh iu khin vng lp thay i s thc thi lnh t dy thng thng ca n. Khi s thc thi
lnh ri khi mt phm vi, tt c cc i tng t ng m c to ra trong phm vi b hy.
C# h tr cc lnh iu khin vng lp sau y. Click vo cc ng link sau bit thm chi tit.
Lnh iu khin

Miu t

Lnh break trong C#

Kt thc vng lp hoc lnh switch v chuyn sang thc thi


vng lp hoc lnh switch ngay sau n.

Lnh continue trong C#

Khi gp lnh ny th chng trnh s b qua cc cu lnh di


n (trong cng mt cu lnh lp) thc hin vng lp mi.

Vng lp v hn trong C#
Mt vng lp l vng lp v hn khi mt iu kin khng bao gi false. Vng lp for thng c
s dng cho mc ch ny. Khi bn ba biu thc iu kin trong vng lp for trng th bn s
to ra mt vng lp v hn.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 47

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

V d
using System;
namespace Loops
{
class Program
{
static void Main(string[] args)
{
for (; ; )
{
Console.WriteLine("Hey! I am Trapped");
}
}
}
}

Khi biu thc iu kin vng mt, n c gi s l lun ng. Bn c th c mt biu thc khi
to v biu thc lng gia, nhng cc lp trnh vin C# thng s dng for(;;) biu th mt vng
lp v hn.

Tnh ng gi trong C#
Encapsulation (Tnh ng gi) c nh ngha l tin trnh ng gi mt hoc nhiu mc bn
trong mt gi logic hoc vt l. Tnh ng gi, trong phng php lp trnh hng i tng, ngn
cn vic truy cp ti chi tit ca trnh trnh trin khai (Implementation Detail).
Tnh tru tng v tnh ng gi l hai c im c lin quan vi nhau trong lp trnh hng i
tng. Tnh tru tng cho php to cc thng tin lin quan c th nhn thy v tnh ng gi cho
lp trnh vin kh nng trin khai tru tng c k tha.
Tnh ng gi c trin khai bi s dng Access Specifier. Mt Access Specifier nh ngha
phm vi v tnh nhn thy ca mt thnh vin lp. C# h tr cc Access Specifier sau:

Public

Private

Protected

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 48

http://vietjack.com/csharp/index.jsp

Internal

Protected internal

Copyright vietjack.com

Public Access Specifier trong C#


Public Access Specifier trong C# cho php mt lp trng by cc bin thnh vin v cc hm
thnh vin ca n ti cc hm v i tng khc. Bt k thnh vin public no trong C# c th
c truy cp t bn ngoi lp .
V d sau minh ha Public Access Specifier trong C#:
using System;
namespace RectangleApplication
{
class Rectangle
{
//member variables
public double length;
public double width;

public double GetArea()


{
return length * width;
}
public void Display()
{
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}//end class Rectangle

class ExecuteRectangle
{
static void Main(string[] args)

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 49

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

{
Rectangle r = new Rectangle();
r.length = 4.5;
r.width = 3.5;
r.Display();
Console.ReadLine();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Length: 4.5
Width: 3.5
Area: 15.75

Trong v d, cc bin thnh vin length v width c khai bo l public, v th chng c th c


truy cp t hm Main() bi s dng mt Instance (mt s th hin) ca lp Rectangle, tn l r.
Hm thnh vin Display() v GetArea() cng c th truy cp cc bin ny mt cch trc tip m
khng cn s dng bt k instance no ca lp.
Hm thnh vin Display() cng c khai bo l public, v th n cng c th c truy cp t
hm Main() bi s dng mt Instance (mt s th hin) ca lp Rectangle, tn l r.

Private Access Specifier trong C#


Private Access Specifier trong C# cho php mt lp n cc bin thnh vin v cc hm thnh vin
ca n vi cc hm v i tng khc. Ch c cc hm trong cng lp c th truy cp ti cc
thnh vin private. Ngay c khi mt Instance ca mt lp cng khng th truy cp cc thnh vin
private ca n.
V d sau minh ha Private Access Specifier trong C#:
using System;
namespace RectangleApplication
{
class Rectangle

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 50

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

{
//member variables
private double length;
private double width;

public void Acceptdetails()


{
Console.WriteLine("Enter Length: ");
length = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter Width: ");
width = Convert.ToDouble(Console.ReadLine());
}
public double GetArea()
{
return length * width;
}
public void Display()
{
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}//end class Rectangle

class ExecuteRectangle
{
static void Main(string[] args)
{
Rectangle r = new Rectangle();
r.Acceptdetails();
r.Display();
Console.ReadLine();
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 51

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Enter Length:
4.4
Enter Width:
3.3
Length: 4.4
Width: 3.3
Area: 14.52

Trong v d, cc bin thnh vin length v width c khai bo private, v th chng khng th
c truy cp t hm Main(). Cc hm thnh vin AcceptDetails() v Display() c th truy cp cc
bin ny. Khi cc hm thnh vin AcceptDetails() v Display() c khai bopublic, chng c th
c truy cp t hm Main() bi s dng mt Instance (mt s th hin) ca lp Rectangle, tn
l r.

Protected Access Specifier trong C#


Protected Access Specifier trong C# cho php mt lp con truy cp cc bin thnh vin v cc
hm thnh vin ca lp c s ca n. Cch ny gip trin khai tnh k tha. Chng ta s tho lun
chi tit v tnh k tha trong chng sau .

Internal Access Specifier trong C#


Internal Access Specifier trong C# cho php mt lp trng by cc bin thnh vin v cc hm
thnh vin ca n ti cc hm v i tng khc trong Assembly hin ti. Ni cch khc, bt k
thnh vin no vi Internal Access Specifier trong C# c th c truy cp t bt k lp hoc
phng thc c nh ngha bn trong ng dng m thnh vin c nh ngha.
V d sau minh ha Internal Access Specifier trong C#:
using System;
namespace RectangleApplication
{
class Rectangle
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 52

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

//member variables
internal double length;
internal double width;

double GetArea()
{
return length * width;
}
public void Display()
{
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}//end class Rectangle

class ExecuteRectangle
{
static void Main(string[] args)
{
Rectangle r = new Rectangle();
r.length = 4.5;
r.width = 3.5;
r.Display();
Console.ReadLine();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Length: 4.5
Width: 3.5
Area: 15.75

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 53

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Trong v d, bn ch rng hm thnh vin GetArea() khng c khai bo vi bt k Access


Specifier no. Th theo mc nh, Access Specifier ca mt thnh vin lp nu chng ta khng khai
bo l private.

Protected Internal Access Specifier trong C#


Protected Internal Access Specifier trong C# cho php mt lp n cc bin thnh vin v cc hm
thnh vin ca n vi cc hm v i tng khc, ngoi tr mt lp con bn trong cng ng dng
. iu ny cng c s dng trong khi trin khai tnh k tha trong C#.

Phng thc trong C#


Mt phng thc l mt nhm lnh cng nhau thc hin mt tc v. Mi chng trnh C# c t
nht mt lp vi mt phng thc l Main.
s dng mt phng thc trong C#, bn cn:

nh ngha phng thc

Gi phng thc

nh ngha phng thc trong C#


Khi bn nh ngha mt phng thc, v c bn, bn khai bo cc phn t ca cu trc ca n. C
php nh ngha mt phng thc trong C# l nh sau:
<Access Specifier> <Return Type> <Method Name>(Parameter List)
{
Method Body
}

Di y l chi tit v cc phn t trong mt phng thc:

Access Specifier: nh ngha tnh nhn thy ca mt bin hoc mt phng thc vi lp
khc.

Return type: Mt phng thc c th tr v mt gi tr. Kiu tr v l kiu d liu ca gi tr


m phng thc tr v. Nu phng thc khng tr v bt k gi tr no, th kiu tr v
l void.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 54

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Method name: Tn phng thc l mt nh danh duy nht v n l phn bit kiu ch. N
khng th ging bt k nh danh no khc c khai bo trong lp .

Parameter list: Danh sch tham s c bao quanh trong du ngoc n, cc tham s ny
c s dng truyn v nhn d liu t mt phng thc. Danh sch tham s lin
quan ti kiu, th t, v s tham s ca mt phng thc. Cc tham s l ty , tc l mt
phng thc c th khng cha tham s no.

Method body: Phn thn phng thc cha tp hp cc ch th cn thit hon thnh
hot ng yu cu.

V d
Chng trnh sau minh ha mt hm FindMax nhn hai gi tr integer v tr v s no ln hn
trong hai s. N c Access Specifier, v th n c th c truy cp t bn ngoi lp bi s dng
mt Instance (s th hin) ca lp .
class NumberManipulator
{
public int FindMax(int num1, int num2)
{
/* local variable declaration */
int result;

if (num1 > num2)


result = num1;
else
result = num2;

return result;
}
...
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 55

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Gi phng thc trong C#


Bn c th gi mt phng thc bi s dng tn ca phng thc . V d sau minh ha cch
gi phng thc trong C#:
using System;
namespace CalculatorApplication
{
class NumberManipulator
{
public int FindMax(int num1, int num2)
{
/* local variable declaration */
int result;

if (num1 > num2)


result = num1;
else
result = num2;
return result;
}
static void Main(string[] args)
{
/* local variable definition */
int a = 100;
int b = 200;
int ret;
NumberManipulator n = new NumberManipulator();

//calling the FindMax method


ret = n.FindMax(a, b);
Console.WriteLine("Max value is : {0}", ret );
Console.ReadLine();
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 56

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Max value is : 200

Bn cng c th gi phng thc public t cc lp khc bng vic s dng Instance (s th hin)
ca lp . V d, phng thc FindMax thuc lp NumberManipulator, bn c th gi n t
lp Test.
using System;
namespace CalculatorApplication
{
class NumberManipulator
{
public int FindMax(int num1, int num2)
{
/* local variable declaration */
int result;

if(num1 > num2)


result = num1;
else
result = num2;

return result;
}
}

class Test
{
static void Main(string[] args)
{
/* local variable definition */

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 57

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

int a = 100;
int b = 200;
int ret;
NumberManipulator n = new NumberManipulator();

//calling the FindMax method


ret = n.FindMax(a, b);
Console.WriteLine("Max value is : {0}", ret );
Console.ReadLine();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Max value is : 200

Gi phng thc qui trong C#


Mt phng thc c th gi chnh n. iu ny c bit n l qui. V d sau tnh ton giai
tha ca s cho bi s dng mt hm qui trong C#:
using System;
namespace CalculatorApplication
{
class NumberManipulator
{
public int factorial(int num)
{
/* local variable declaration */
int result;
if (num == 1)
{
return 1;
}
else

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 58

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

{
result = factorial(num - 1) * num;
return result;
}
}

static void Main(string[] args)


{
NumberManipulator n = new NumberManipulator();
//calling the factorial method
Console.WriteLine("Factorial of 6 is : {0}", n.factorial(6));
Console.WriteLine("Factorial of 7 is : {0}", n.factorial(7));
Console.WriteLine("Factorial of 8 is : {0}", n.factorial(8));
Console.ReadLine();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Factorial of 6 is: 720
Factorial of 7 is: 5040
Factorial of 8 is: 40320

Truyn tham s cho phng thc trong C#


Khi phng thc vi cc tham s c gi, bn cn truyn cc tham s cho phng thc . C 3
cch m tham s c th c truyn ti mt phng thc trong C#:
K thut

Truyn tham s bi gi tr trong C#

Miu t

Phng thc ny sao chp gi tr thc s ca


mt tham s vo trong tham s chnh thc ca
hm . Trong trng hp ny, cc thay i
c to ra vi tham s chnh thc bn trong
hm ny s khng nh hng ti tham s

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 59

http://vietjack.com/csharp/index.jsp

Truyn tham s bi tham chiu trong C#

Truyn tham s bi output trong C#

Copyright vietjack.com
Phng thc ny sao chp tham chiu ti v tr
b nh ca mt tham s vo trong tham s
chnh thc. Ngha l cc thay i c to ra
ti tham s chnh thc nh hng ti tham s

Phng thc ny gip

Nullable trong C#
C# cung cp mt kiu d liu c bit, kiu nullable, t bn c th gn dy cc gi tr thng
thng cng nh cc gi tr null trong C#.
V d: Bn c th lu gi bt k gi tr t -2,147,483,648 ti 2,147,483,647 hoc null trong mt bin
Nullable<Int32>. Tng t, bn c th gn true, false hoc null trong mt bin Nullable<bool>. C
php khai bo mt kiu nullable trong C# l nh sau:
< data_type> ? <variable_name> = null;

V d sau minh ha cch s dng kiu d liu nullable trong C#:


using System;
namespace CalculatorApplication
{
class NullablesAtShow
{
static void Main(string[] args)
{
int? num1 = null;
int? num2 = 45;
double? num3 = new double?();
double? num4 = 3.14157;

bool? boolval = new bool?();

// display the values

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 60

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Console.WriteLine("Nullables at Show: {0}, {1}, {2}, {3}", num1, num2, num3, num4);
Console.WriteLine("A Nullable boolean value: {0}", boolval);
Console.ReadLine();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Nullables at Show: , 45,

, 3.14157

A Nullable boolean value:

Ton t ?? trong C#
Ton t Null Coalescing hay ton t ?? trong C# c s dng vi cc kiu gi tr nullable v cc
kiu tham chiu. N c s dng chuyn i mt ton hng ti ton hng vi kiu nullable, ti
y c th l mt s chuyn i ngm nh.
Vi ton t ny s lm code bn gn, sch v chuyn nghip hn. Ton t ?? c gii thiu
t C# phin bn 2.0. Ton t ?? c 2 ton hng. Nu gi tr ca ton hng u tin l null, th ton
t tr v gi tr ca ton hng th hai; nu khng th, n tr v gi tr ca ton hng u tin. V d
sau minh ha ton t ?? trong C#:
using System;
namespace CalculatorApplication
{
class NullablesAtShow
{
static void Main(string[] args)
{
double? num1 = null;
double? num2 = 3.14157;
double num3;
num3 = num1 ?? 5.34;
Console.WriteLine(" Value of num3: {0}", num3);
num3 = num2 ?? 5.34;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 61

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Console.WriteLine(" Value of num3: {0}", num3);


Console.ReadLine();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Value of num3: 5.34
Value of num3: 3.14157

Mng (Array) trong C#


Mt mng lu gi mt tp hp cc phn t c kch c c nh trong cng kiu. Mt mng c s
dng lu gi mt tp hp d liu, nhng n thng hu ch hn khi ngh v mt mng nh l
mt tp hp cc bin cng kiu c lu gi ti cc v tr b nh k nhau.
Thay v khai bo bin mt cch ri rc, nh bin number0, number1, v number99, bn c th
khai bo mt mng cc gi tr nh numbers[0], numbers[1] v numbers[99] biu din cc gi
tr ring bit. Mt thnh vin c th ca mng c th c truy cp qua index (ch s).
Tt c mng u bao gm cc v tr nh lin k nhau. a ch thp nht tng ng vi thnh vin
u tin v a ch cao nht tng ng vi thnh vin cui cng ca mng.

Khai bo mng trong C#


khai bo mt mng trong ngn ng C#, bn c th s dng c php:
datatype[] arrayName;

Ti y:

datatype c s dng xc nh kiu ca phn t trong mng.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 62

http://vietjack.com/csharp/index.jsp

[ ] xc nh rank hay kch c ca mng.

arrayName xc nh tn mng.

Copyright vietjack.com

V d:
double[] balance;

Khi to mng trong C#


Vic khai bo mt mng khng khi to mng trong b nh. Khi bin mng c khi to, bn c
th gn gi tr cho mng .
Mng l mt kiu tham chiu, v th bn cn s dng t kha new trong C# to mt Instance
(s th hin) ca mng . V d:
double[] balance = new double[10];

Gn gi tr cho mt mng trong C#


Bn c th gn gi tr cho cc phn t mng ring bit bi s dng ch s mng, nh:
double[] balance = new double[10];
balance[0] = 4500.0;

Bn c th gn gi tr cho mng ti thi im khai bo mng, nh sau:


double[] balance = { 2340.0, 4523.69, 3421.0};

Bn cng c th to v khai bo mt mng, nh sau:


int [] marks = new int[5]

{ 99,

98, 92, 97, 95};

Bn cng c th b qua kch c mng, nh:


int [] marks = new int[]

{ 99,

98, 92, 97, 95};

Bn c th sao chp mt bin mng vo trong bin mng mc tiu khc. Trong tnh hung ny, c
bin mc tiu v bin ngun u tr ti cng v tr b nh:
int [] marks = new int[]

{ 99,

98, 92, 97, 95};

int[] score = marks;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 63

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Khi bn to mt mng, C# compiler ngm nh khi to mi phn t mng thnh mt gi tr mc


nh ph thuc vo kiu mng. V d, vi mt mng int, th tt c phn t c khi to l 0.

Truy cp cc phn t mng trong C#


Mt phn t c truy cp bi ch mc mng. iu ny c thc hin bi vic t ch s ca
phn t bn trong du ngoc vung sau tn mng. V d:
double salary = balance[9];

V d sau minh ha khi nim v khai bo, gn v truy cp mng trong C# cp trn:
using System;
namespace ArrayApplication
{
class MyArray
{
static void Main(string[] args)
{
int []

n = new int[10]; /* n is an array of 10 integers */

int i,j;

/* initialize elements of array n */


for ( i = 0; i < 10; i++ )
{
n[ i ] = i + 100;
}

/* output each array element's value */


for (j = 0; j < 10; j++ )
{
Console.WriteLine("Element[{0}] = {1}", j, n[j]);
}
Console.ReadKey();
}
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 64

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Khi code trn c bin dch v thc thi, n s cho kt qu:


Element[0] = 100
Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109

S dng vng lp foreach trong C#


Trong v d trc, chng ta s dng mt vng lp for truy cp mi phn t trong mng. Bn
cng c th s dng mt lnh foreach duyt qua mt mng trong C#:
using System;
namespace ArrayApplication
{
class MyArray
{
static void Main(string[] args)
{
int []

n = new int[10]; /* n is an array of 10 integers */

/* initialize elements of array n */


for ( int i = 0; i < 10; i++ )
{
n[i] = i + 100;
}

/* output each array element's value */


foreach (int j in n )

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 65

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

{
int i = j-100;
Console.WriteLine("Element[{0}] = {1}", i, j);
i++;
}
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Element[0] = 100
Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109

Chi tit v mng trong C#


Mng l mt phn rt quan trng trong ngn ng C#. Di y l nhng nh ngha quan trng lin
quan n mng m c trnh by r rng hn cho cc lp trnh vin C#:
Khi nim

Miu t

Mng a chiu trong C#

C# h tr mng a chiu. Mu n gin nht ca mng


a chiu l mng hai chiu

Jagged array trong C#

Truyn mng ti hm trong C#

C# h tr mng a chiu, m l mng ca cc mng

Bn c th truyn cho hm mt con tr ti mt mng


bng vic xc nh tn mng m khng cn ch s ca

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 66

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

mng

Mng tham s trong C#

c s dng truyn mt s lng cha bit ca cc


tham s ti mt hm
c nh ngha trong System namespace, n l lp c
s cho tt c mng, v cung cp cc thuc tnh v
phng thc lm vic vi mng

Lp Array trong C#

Chui (String) trong C#


Trong C#, bn c th s dng cc chui (string) nh l mng cc k t. Tuy nhin, ph bin hn l
s dng t kha string khai bo mt bin chui. T kha string l mt alias cho
lp System.String trong C#.

To mt i tng String trong C#


Bn c th to i tng String bi s dng mt trong cc phng thc sau:

Bng vic gn mt hng chui cho mt bin String

S dng mt constructor ca lp String

S dng ton t ni chui (+)

Bi vic thu nhn mt thuc tnh hoc gi mt phng thc m tr v mt chui

Bng vic gi mt phng thc nh dng chuyn i mt gi tr hoc mt i tng


thnh biu din chui ca n.

V d sau minh ha cc phng thc to mt chui trong C#:


using System;
namespace StringApplication
{
class Program
{
static void Main(string[] args)
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 67

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

//from string literal and string concatenation


string fname, lname;
fname = "Rowan";
lname = "Atkinson";

string fullname = fname + lname;


Console.WriteLine("Full Name: {0}", fullname);

//by using string constructor


char[] letters = { 'H', 'e', 'l', 'l','o' };
string greetings = new string(letters);
Console.WriteLine("Greetings: {0}", greetings);

//methods returning string


string[] sarray = { "Hello", "From", "Tutorials", "Point" };
string message = String.Join(" ", sarray);
Console.WriteLine("Message: {0}", message);

//formatting method to convert a value


DateTime waiting = new DateTime(2012, 10, 10, 17, 58, 1);
string chat = String.Format("Message sent at {0:t} on {0:D}", waiting);
Console.WriteLine("Message: {0}", chat);
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Full Name: Rowan Atkinson
Greetings: Hello
Message: Hello From Tutorials Point
Message: Message sent at 5:58 PM on Wednesday, October 10, 2012

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 68

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Cc thuc tnh ca lp String trong C#


Lp String trong C# c hai thuc tnh:
STT

Thuc tnh

Chars
Ly i tng Char ti mt v tr c th trong i tng String hin ti

Length
Ly s k t ca i tng String hin ti

Phng thc ca lp String trong C#


Lp String c mt s phng thc m hu ch cho bn trong khi lm vic vi cc i tng String
trong C#. Bng di y lit k cc phng thc c s dng ph bin nht:
STT

Phng thc

public static int Compare(string strA, string strB)


So snh hai i tng String c th v tr v mt integer m ch v tr c lin quan ca
chng trong th t sp xp

public static int Compare(string strA, string strB, bool ignoreCase )


So snh hai i tng String c th v tr v mt integer m ch v tr c lin quan ca
chng trong th t sp xp. Tuy nhin, n b qua s phn bit kiu nu tham s
Boolean l true

public static string Concat(string str0, string str1)


Ni chui hai i tng String

public static string Concat(string str0, string str1, string str2)

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 69

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Ni chui ba i tng String

public static string Concat(string str0, string str1, string str2, string str3)
Ni chui bn i tng String

public bool Contains(string value)


Tr v mt gi tr ch dn c hay khng i tng String cho xut hin bn trong
chui ny

public static string Copy(string str)


To mt i tng String mi vi cng gi tr nh chui cho

public void CopyTo(int sourceIndex, char[] destination, int destinationIndex, int


count)
Sao chp mt s k t c th t mt v tr cho ca i tng String ti mt v tr
xc nh trong mt mng cc k t Unicode

public bool EndsWith(string value)


Xc nh c hay khng phn kt thc ca i tng String l so khp vi chui cho

10

public bool Equals(string value)


Xc nh c hay khng i tng String hin ti v i tng String cho l c cng
gi tr

11

public static bool Equals(string a, string b)


Xc nh c hay khng hai i tng String cho c cng gi tr

12

public static string Format(string format, Object arg0)


Thay th mt hoc nhiu mc nh dng trong mt chui cho vi biu din chui
ca mt i tng c th

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 70

http://vietjack.com/csharp/index.jsp
13

Copyright vietjack.com

public int IndexOf(char value)


Tr v ch mc (da trn c s 0) cho s xut hin u tin ca k t Unicode cho
trong chui hin ti

14

public int IndexOf(string value)


Tr v ch mc (da trn c s 0) cho s xut hin u tin ca chui cho trong
Instance (s th hin) ny

15

public int IndexOf(char value, int startIndex)


Tr v ch mc (da trn c s 0) cho s xut hin u tin ca k t Unicode cho
trong chui ny, bt u tm kim ti v tr ca k t cho

16

public int IndexOf(string value, int startIndex)


Tr v ch mc (da trn c s 0) cho s xut hin u tin ca chui cho trong
Instance (s th hin) ny, bt u tm kim ti v tr ca k t cho

17

public int IndexOfAny(char[] anyOf)


Tr v ch mc (da trn c s 0) cho s xut hin u tin ca Instance (s th hin)
ny ca bt k k t no trong mt mng k t Unicode xc nh

18

public int IndexOfAny(char[] anyOf, int startIndex)


Tr v ch mc (da trn c s 0) cho s xut hin u tin ca Instance (s th hin)
ny ca bt k k t no trong mt mng k t Unicode xc nh, bt u tm kim
ti v tr ca k t cho

19

public string Insert(int startIndex, string value)


Tr v mt chui mi trong mt chui cho c chn ti mt v tr c ch mc
xc nh trong i tng String hin ti

20

public static bool IsNullOrEmpty(string value)

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 71

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Ch rng c hay khng chui cho l null hoc l mt chui Empty

21

public static string Join(string separator, params string[] value)


Ni chui tt c phn t ca mt mng chui, bi s dng Separator (b tch) cho
gia mi phn t

22

public static string Join(string separator, string[] value, int startIndex, int count)
Ni chui cc phn t xc nh ca mt mng chui, bi s dng Separator (b
tch) cho gia mi phn t

23

public int LastIndexOf(char value)


Tr v ch mc (da trn c s 0) cho s xut hin cui cng ca k t Unicode
cho bn trong i tng String hin ti

24

public int LastIndexOf(string value)


Tr v ch mc (da trn c s 0) cho s xut hin cui cng ca mt chui cho
bn trong i tng String hin ti

25

public string Remove(int startIndex)


G b tt c k t trong Instance hin ti, bt u ti v tr xc nh v tip tc ti v
tr cui cng, v tr v chui

26

public string Remove(int startIndex, int count)


G b s k t cho trong chui hin ti bt u ti mt v tr xc nh v tr v
chui

27

public string Replace(char oldChar, char newChar)


Thay th tt c k t Unicode cho xut hin trong i tng String hin ti vi k t
Unicode xc nh v tr v chui mi

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 72

http://vietjack.com/csharp/index.jsp
28

Copyright vietjack.com

public string Replace(string oldValue, string newValue)


Thay th tt c chui cho xut hin trong i tng String hin ti vi i tng
string xc nh v tr v chui mi

29

public string[] Split(params char[] separator)


Tr v mt mng chui m cha cc chui ph trong i tng String hin ti, c
gii hn bi cc phn t ca mt mng k t Unicode cho

30

public string[] Split(char[] separator, int count)


Tr v mt mng chui m cha cc chui ph trong i tng String hin ti, c
gii hn bi cc phn t ca mt mng k t Unicode cho. Tham s int xc nh s
chui ph ti a tr v

31

public bool StartsWith(string value)


Xc nh c hay khng phn bt u ca instance ca chui ny so khp vi chui
cho

32

public char[] ToCharArray()


Tr v mt mng k t Unicode vi tt c k t trong i tng String hin ti

33

public char[] ToCharArray(int startIndex, int length)


Tr v mt mng k t Unicode vi tt c k t trong i tng String hin ti, bt u
t ch mc xc nh v ti di cho

34

public string ToLower()


Tr v mt bn sao ca chui ny c bin i thnh ch thng

35

public string ToUpper()


Tr v mt bn sao ca chui ny c bin i thnh ch hoa

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 73

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

public string Trim()

36

G b tt c k t whitespace t i tng String hin ti


Bn c th vo th vin MSDN ly danh sch y cc phng thc v constructor ca lp
String.

V d
V d sau minh ha mt s phng thc trn:
So snh chui trong C#:
using System;
namespace StringApplication
{
class StringProg
{
static void Main(string[] args)
{
string str1 = "This is test";
string str2 = "This is text";

if (String.Compare(str1, str2) == 0)
{
Console.WriteLine(str1 + " and " + str2 +

" are equal.");

}
else
{
Console.WriteLine(str1 + " and " + str2 + " are not equal.");
}
Console.ReadKey() ;
}
}
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 74

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Khi code trn c bin dch v thc thi, n s cho kt qu:


This is test and This is text are not equal.

Chui cha chui trong C#:


using System;
namespace StringApplication
{
class StringProg
{
static void Main(string[] args)
{
string str = "This is test";
if (str.Contains("test"))
{
Console.WriteLine("The sequence 'test' was found.");
}
Console.ReadKey() ;
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


The sequence 'test' was found.

Ly chui ph trong C#:


using System;
namespace StringApplication
{
class StringProg
{
static void Main(string[] args)
{
string str = "Last night I dreamt of San Pedro";

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 75

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Console.WriteLine(str);
string substr = str.Substring(23);
Console.WriteLine(substr);
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


San Pedro

Ni chui trong C#:


using System;
namespace StringApplication
{
class StringProg
{
static void Main(string[] args)
{
string[] starray = new string[]{"Down the way nights are dark",
"And the sun shines daily on the mountain top",
"I took a trip on a sailing ship",
"And when I reached Jamaica",
"I made a stop"};

string str = String.Join("\n", starray);


Console.WriteLine(str);
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Down the way nights are dark
And the sun shines daily on the mountain top

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 76

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

I took a trip on a sailing ship


And when I reached Jamaica
I made a stop

Cu trc (Structure) trong C#


Trong C#, mt cu trc (structure) l mt kiu d liu. N gip bn to mt bin n m gi d liu
lin quan ca cc kiu d liu a dng. T kha struct trong C# c s dng to mt cu trc
(structure).
Cc cu trc c s dng biu din mt bn ghi (record). Gi s bn mun theo di cc cun
sch trong mt th vin. Bn c th mun theo di cc thuc tnh sau ca mi cun sch:

Title

Author

Subject

Book ID

nh ngha cu trc trong C#


nh ngha cu trc, bn phi s dng lnh struct. Cu lnh struct nh ngha mt kiu d liu
mi, vi hn mt thnh vin trong chng trnh ca bn.
V d di y l cch bn khai bo cu trc Book:
struct Books
{
public string title;
public string author;
public string subject;
public int book_id;
};

Chng trnh sau minh ha cch s dng cu trc trn trong C#:
using System;
struct Books
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 77

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

public string title;


public string author;
public string subject;
public int book_id;
};

public class testStructure


{
public static void Main(string[] args)
{

Books Book1;

/* Declare Book1 of type Book */

Books Book2;

/* Declare Book2 of type Book */

/* book 1 specification */
Book1.title = "C Programming";
Book1.author = "Nuha Ali";
Book1.subject = "C Programming Tutorial";
Book1.book_id = 6495407;

/* book 2 specification */
Book2.title = "Telecom Billing";
Book2.author = "Zara Ali";
Book2.subject =

"Telecom Billing Tutorial";

Book2.book_id = 6495700;

/* print Book1 info */


Console.WriteLine( "Book 1 title : {0}", Book1.title);
Console.WriteLine("Book 1 author : {0}", Book1.author);
Console.WriteLine("Book 1 subject : {0}", Book1.subject);
Console.WriteLine("Book 1 book_id :{0}", Book1.book_id);

/* print Book2 info */

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 78

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Console.WriteLine("Book 2 title : {0}", Book2.title);


Console.WriteLine("Book 2 author : {0}", Book2.author);
Console.WriteLine("Book 2 subject : {0}", Book2.subject);
Console.WriteLine("Book 2 book_id : {0}", Book2.book_id);

Console.ReadKey();

}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Book 1 title : C Programming
Book 1 author : Nuha Ali
Book 1 subject : C Programming Tutorial
Book 1 book_id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Zara Ali
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 6495700

c im ca cu trc trong C#
trn, bn s dng mt cu trc Books n gin. Cc cu trc trong C# l kh khc vi kiu
cu trc truyn thng trong C hoc C++. Cu trc trong C# c cc c im sau:

Cu trc c th c cc phng thc, cc trng, indexer, thuc tnh, phng thc


operator, v s kin.

Cu trc c th c cc constructor c nh ngha, nhng khng c destructor. Tuy


nhin, bn khng th nh ngha mt constructor mc nh cho mt cu trc. Constructor
mc nh c nh ngha t ng v khng th b thay i.

Khng ging cc Lp, cu trc khng th k tha t cu trc hoc lp khc.

Cu trc khng th c s dng nh l mt c s cho cu trc hoc lp khc.

Mt cu trc c th trin khai mt hoc nhiu Interface.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 79

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Thnh vin cu trc khng th c xc nh dng abstract, virtual, hoc protected.

Khi bn to mt i tng Struct bi s dng ton t new, n ly i tng to v


constructor thch hp c gi. Khng ging Lp, cu trc c th c thuyt minh m
khng cn s dng ton t new.

Nu ton t new khng c s dng, th cc trng cha c gn v i tng khng


th c s dng ti khi tt c trng c khi to.

Phn bit Class v Structure trong C#


Lp v Cu trc trong C# c mt s im khc nhau c bn sau:

Cc Lp l cc kiu tham chiu, cn cu trc l cc kiu gi tr.

Cu trc khng h tr tnh k tha.

Cu trc khng c constructor mc nh.

T cc im trn, chng ta vit li v d trn:


using System;
struct Books
{
private string title;
private string author;
private string subject;
private int book_id;
public void getValues(string t, string a, string s, int id)
{
title = t;
author = a;
subject = s;
book_id = id;
}
public void display()
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 80

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Console.WriteLine("Title : {0}", title);


Console.WriteLine("Author : {0}", author);
Console.WriteLine("Subject : {0}", subject);
Console.WriteLine("Book_id :{0}", book_id);
}

};

public class testStructure


{
public static void Main(string[] args)
{

Books Book1 = new Books();

/* Declare Book1 of type Book */

Books Book2 = new Books();

/* Declare Book2 of type Book */

/* book 1 specification */
Book1.getValues("C Programming",
"Nuha Ali", "C Programming Tutorial",6495407);

/* book 2 specification */
Book2.getValues("Telecom Billing",
"Zara Ali", "Telecom Billing Tutorial", 6495700);

/* print Book1 info */


Book1.display();

/* print Book2 info */


Book2.display();

Console.ReadKey();

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 81

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Khi code trn c bin dch v thc thi, n s cho kt qu:


Title : C Programming
Author : Nuha Ali
Subject : C Programming Tutorial
Book_id : 6495407
Title : Telecom Billing
Author : Zara Ali
Subject : Telecom Billing Tutorial
Book_id : 6495700

Enum trong C#
Mt Enumeration (lit k) l mt tp hp cc hng s nguyn c t tn. Mt kiu enum c
khai bo bi s dng t kha enum trong C#.
Cc kiu lit k trong C# l kiu d liu gi tr. Ni cch khc, kiu lit k cha cc gi tr ca n v
khng th k tha hoc khng th truyn tnh k tha.

Khai bo bin enum trong C#


C php chung khai bo mt Enumeration trong C# l:
enum <enum_name>
{
enumeration list
};

Ti y,

enum_name xc nh tn kiu lit k.

enumeration list l danh sch cc nh danh c phn bit nhau bi du phy.

Mi biu tng trong danh sch lit k ny i din cho mt gi tr integer, biu tng sau c gi tr
ln hn ca biu tng trc. Theo mc nh, gi tr ca biu tng kiu lit k u tin l 0. V
d:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 82

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat };

V d
V d sau minh ha cch s dng ca bin enum trong C#:
using System;
namespace EnumApplication
{
class EnumProgram
{
enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat };

static void Main(string[] args)


{
int WeekdayStart = (int)Days.Mon;
int WeekdayEnd = (int)Days.Fri;
Console.WriteLine("Monday: {0}", WeekdayStart);
Console.WriteLine("Friday: {0}", WeekdayEnd);
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Monday: 1
Friday: 5

Lp (Class) trong C#
Khi bn nh ngha mt lp (class) trong C#, bn nh ngha mt blueprint cho mt kiu d liu.
iu ny khng thc s nh ngha bt k d liu no, nhng n nh ngha ngha ca tn lp
. Tc l, mt i tng ca lp gm nhng ci g, cc hot ng no c th c thc hin
trn i tng . Cc i tng l instance (s th hin) ca mt lp. Cc phng thc v cc
bin m cu to nn mt lp c gi l cc thnh vin ca lp .

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 83

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

nh ngha mt Class trong C#


Mt nh ngha lp trong C# bt u vi t kha class c theo sau bi tn lp; v phn thn lp
c bao quanh bi cc du ngoc m. Di y l form chung ca mt nh ngha lp trong C#:
<access specifier> class

class_name

{
// member variables
<access specifier> <data type> variable1;
<access specifier> <data type> variable2;
...
<access specifier> <data type> variableN;
// member methods
<access specifier> <return type> method1(parameter_list)
{
// method body
}
<access specifier> <return type> method2(parameter_list)
{
// method body
}
...
<access specifier> <return type> methodN(parameter_list)
{
// method body
}
}

Ghi ch:

Access specifier xc nh cc qui tc truy cp cho cc thnh vin cng nh chnh lp .


Nu khng c cp, th Access Specifier mc nh cho mt kiu lp linternal. Ch
truy cp mc nh cho cc thnh vin l private.

Data type xc nh kiu bin, v tr v kiu d liu m phng thc tr v.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 84

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

truy cp cc thnh vin lp, bn s dng ton t dot (.).

Ton t dot (.) lin kt vi tn ca mt i tng vi tn ca mt thnh vin.

V d sau minh ha cc khi nim v lp trong C# c cp trn:


using System;
namespace BoxApplication
{
class Box
{
public double length;

// Length of a box

public double breadth;

// Breadth of a box

public double height;

// Height of a box

}
class Boxtester
{
static void Main(string[] args)
{
Box Box1 = new Box();

// Declare Box1 of type Box

Box Box2 = new Box();

// Declare Box2 of type Box

double volume = 0.0;

// Store the volume of a box here

// box 1 specification
Box1.height = 5.0;
Box1.length = 6.0;
Box1.breadth = 7.0;

// box 2 specification
Box2.height = 10.0;
Box2.length = 12.0;
Box2.breadth = 13.0;

// volume of box 1

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 85

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

volume = Box1.height * Box1.length * Box1.breadth;


Console.WriteLine("Volume of Box1 : {0}",

volume);

// volume of box 2
volume = Box2.height * Box2.length * Box2.breadth;
Console.WriteLine("Volume of Box2 : {0}", volume);
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Volume of Box1 : 210
Volume of Box2 : 1560

Hm thnh vin v tnh ng gi trong C#


Mt hm thnh vin trong C# ca mt lp l mt hm m c nh ngha v nguyn mu (prototype)
ca n bn trong nh ngha lp tng t nh bt k bin no khc. N hot ng trn bt k i
tng no ca lp m n l thnh vin v c truy cp ti tt c thnh vin ca mt lp cho i
tng .
Cc bin thnh vin l cc thuc tnh ca mt i tng (t bi cnh thit k) v chng c gi
private trin khai tnh ng gi. Nhng bin ny ch c th c truy cp bi s dng cc hm
thnh vin public.
V d sau minh ha cch s dng cc khi nim trn thit lp v ly gi tr ca cc thnh vin
khc nhau trong mt lp:
using System;
namespace BoxApplication
{
class Box
{
private double length;

// Length of a box

private double breadth;

// Breadth of a box

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 86

http://vietjack.com/csharp/index.jsp
private double height;

Copyright vietjack.com

// Height of a box

public void setLength( double len )


{
length = len;
}

public void setBreadth( double bre )


{
breadth = bre;
}

public void setHeight( double hei )


{
height = hei;
}
public double getVolume()
{
return length * breadth * height;
}
}
class Boxtester
{
static void Main(string[] args)
{
Box Box1 = new Box();

// Declare Box1 of type Box

Box Box2 = new Box();


double volume;

// Declare Box2 of type Box


// box 1 specification
Box1.setLength(6.0);
Box1.setBreadth(7.0);
Box1.setHeight(5.0);

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 87

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

// box 2 specification
Box2.setLength(12.0);
Box2.setBreadth(13.0);
Box2.setHeight(10.0);

// volume of box 1
volume = Box1.getVolume();
Console.WriteLine("Volume of Box1 : {0}" ,volume);

// volume of box 2
volume = Box2.getVolume();
Console.WriteLine("Volume of Box2 : {0}", volume);

Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Volume of Box1 : 210
Volume of Box2 : 1560

Constructor trong C#
Mt constructor ca mt Class, l mt hm thnh vin c bit ca mt lp, c thc thi bt c
khi no chng ta to cc i tng mi ca lp .
Mt constructor c tn ging nh tn lp v n khng c bt k kiu tr v no. Di y l v d
minh ha khi nim constructor trong C#:
using System;
namespace LineApplication
{
class Line

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 88

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

{
private double length;

// Length of a line

public Line()
{
Console.WriteLine("Object is being created");
}

public void setLength( double len )


{
length = len;
}

public double getLength()


{
return length;
}

static void Main(string[] args)


{
Line line = new Line();

// set line length


line.setLength(6.0);
Console.WriteLine("Length of line : {0}", line.getLength());
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Object is being created
Length of line : 6

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 89

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Mt constructor mc nh trong C# khng c bt k tham s no, nhng nu bn cn, mt


constructor c th c tham s. Nhng constructor ny c gi l constructor c tham s
ha. K thut ny gip bn gn gi tr khi u cho mt i tng ti thi im to ra n, nh
trong v d sau:
using System;
namespace LineApplication
{
class Line
{
private double length;

// Length of a line

public Line(double len)

//Parameterized constructor

{
Console.WriteLine("Object is being created, length = {0}", len);
length = len;
}

public void setLength( double len )


{
length = len;
}
public double getLength()
{
return length;
}

static void Main(string[] args)


{
Line line = new Line(10.0);
Console.WriteLine("Length of line : {0}", line.getLength());

// set line length


line.setLength(6.0);
Console.WriteLine("Length of line : {0}", line.getLength());

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 90

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Object is being created, length = 10
Length of line : 10
Length of line : 6

Destructor trong C#
Mt destructor trong C#, l mt hm thnh vin c bit ca mt lp, c thc thi bt c khi no
mt i tng ca lp thot ra khi phm vi. Mt destructor c tn ging tn lp vi mt du
ng (~) trc v n c th: khng tr v mt gi tr hoc khng nhn bt k tham s no.
Destructor trong C# c th rt hu ch gii phng ti nguyn b nh trc khi thot khi chng
trnh. Destructor khng th b k tha hoc np chng.
V d sau minh ha khi nim v destructor trong C#:
using System;
namespace LineApplication
{
class Line
{
private double length;
public Line()

// Length of a line

// constructor

{
Console.WriteLine("Object is being created");
}
~Line() //destructor
{
Console.WriteLine("Object is being deleted");
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 91

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

public void setLength( double len )


{
length = len;
}

public double getLength()


{
return length;
}

static void Main(string[] args)


{
Line line = new Line();

// set line length


line.setLength(6.0);
Console.WriteLine("Length of line : {0}", line.getLength());
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Object is being created
Length of line : 6
Object is being deleted

Thnh vin Static ca mt Class trong C#


Chng ta c th nh ngha cc thnh vin lp l static bi s dng t kha static trong C#. Khi
chng ta khai bo mt thnh vin lp l static, ngha l, d cho c bao nhiu i tng ca lp
c to, th ch c mt bn sao ca thnh vin static.
T kha static ng rng ch c mt instance (s th hin) ca thnh vin tn ti cho mt lp .
Cc bin static c s dng nh ngha cc hng s (constant) bi v gi tr ca chng c th
c thu nhn bng vic gi lp m khng cn to mt instance ca n. Cc bin static c th

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 92

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

c khi to bn ngoi hm thnh vin hoc nh ngha lp. Bn cng c th khi to cc bin
static bn trong nh ngha lp.
V d sau minh ha cch s dng ca cc bin static trong C#:
using System;
namespace StaticVarApplication
{
class StaticVar
{
public static int num;
public void count()
{
num++;
}
public int getNum()
{
return num;
}
}
class StaticTester
{
static void Main(string[] args)
{
StaticVar s1 = new StaticVar();
StaticVar s2 = new StaticVar();
s1.count();
s1.count();
s1.count();
s2.count();
s2.count();
s2.count();
Console.WriteLine("Variable num for s1: {0}", s1.getNum());
Console.WriteLine("Variable num for s2: {0}", s2.getNum());

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 93

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Variable num for s1: 6
Variable num for s2: 6

Bn cng c th khai bo mt hm thnh vin l static. Nhng hm ny ch c th truy cp


cc bin static. Hm static c th tn ti trc c khi i tng c to. V d sau minh ha
cch s dng ca hm static trong C#:
using System;
namespace StaticVarApplication
{
class StaticVar
{
public static int num;
public void count()
{
num++;
}
public static int getNum()
{
return num;
}
}
class StaticTester
{
static void Main(string[] args)
{
StaticVar s = new StaticVar();
s.count();

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 94

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

s.count();
s.count();
Console.WriteLine("Variable num: {0}", StaticVar.getNum());
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Variable num: 3

Tnh k tha trong C#


Mt trong nhng khi nim quan trng nht trong lp trnh hng i tng l Tnh k tha
(Inheritance). Tnh k tha cho php chng ta nh ngha mt lp trong iu kin mt lp khc,
m lm cho n d dng hn to v duy tr mt ng dng. iu ny cng cung cp mt c hi
ti s dng tnh nng code v thi gian thc thi nhanh hn.
Khi to mt lp, thay v vit ton b cc thnh vin d liu v cc hm thnh vin mi, lp trnh
vin c th nn k tha cc thnh vin ca mt lp ang tn ti. Lp ang tn ti ny c gi
l Base Class - lp c s, v lp mi c xem nh l Derived Class lp tha k.
tng ca tnh k tha trin khai mi quan h IS-A (L Mt). V d, mammal IS A animal, dog ISA mammal, v th dog IS-A animal, v ....

Lp c s (Base Class) v Lp tha k (Derived


Class) trong C#
Mt lp c th c k tha t hn mt lp khc, ngha l, n c th k tha d liu v hm t
nhiu Lp hoc Interface c s.
C php to lp k tha trong C# l:
<acess-specifier> class <base_class>
{
...
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 95

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

class <derived_class> : <base_class>


{
...
}

Xt mt lp c s Shape v lp k tha Rectangle sau:


using System;
namespace InheritanceApplication
{
class Shape
{
public void setWidth(int w)
{
width = w;
}
public void setHeight(int h)
{
height = h;
}
protected int width;
protected int height;
}

// Derived class
class Rectangle: Shape
{
public int getArea()
{
return (width * height);
}
}

class RectangleTester

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 96

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

{
static void Main(string[] args)
{
Rectangle Rect = new Rectangle();

Rect.setWidth(5);
Rect.setHeight(7);

// Print the area of the object.


Console.WriteLine("Total area: {0}",

Rect.getArea());

Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Total area: 35

Khi to Lp c s (Base Class) trong C#


Lp k tha (Derived Class) trong C# k tha cc bin thnh vin v cc phng thc thnh vin
t lp c s. V th, i tng ca lp cha nn c to trc khi lp ph c to. Bn c th
cung cp cc ch th khi to lp ph trong danh sch khi to thnh vin.
Chng trnh v d sau minh ha cch khi to Lp c s (Base Class) trong C#:
using System;
namespace RectangleApplication
{
class Rectangle
{
//member variables
protected double length;
protected double width;
public Rectangle(double l, double w)

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 97

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

{
length = l;
width = w;
}

public double GetArea()


{
return length * width;
}

public void Display()


{
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}//end class Rectangle

class Tabletop : Rectangle


{
private double cost;
public Tabletop(double l, double w) : base(l, w)
{ }
public double GetCost()
{
double cost;
cost = GetArea() * 70;
return cost;
}
public void Display()
{
base.Display();
Console.WriteLine("Cost: {0}", GetCost());

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 98

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

}
}
class ExecuteRectangle
{
static void Main(string[] args)
{
Tabletop t = new Tabletop(4.5, 7.5);
t.Display();
Console.ReadLine();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Length: 4.5
Width: 7.5
Area: 33.75
Cost: 2362.5

a k tha trong C#
C# khng h tr a k tha. Tuy nhin, bn c th s dng Interface trin khai a k tha. V
d sau minh ha cch s dng Interface trin khai a k tha trong C#:
using System;
namespace InheritanceApplication
{
class Shape
{
public void setWidth(int w)
{
width = w;
}
public void setHeight(int h)
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 99

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

height = h;
}
protected int width;
protected int height;
}

// Base class PaintCost


public interface PaintCost
{
int getCost(int area);

// Derived class
class Rectangle : Shape, PaintCost
{
public int getArea()
{
return (width * height);
}
public int getCost(int area)
{
return area * 70;
}
}
class RectangleTester
{
static void Main(string[] args)
{
Rectangle Rect = new Rectangle();
int area;
Rect.setWidth(5);
Rect.setHeight(7);

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 100

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

area = Rect.getArea();

// Print the area of the object.


Console.WriteLine("Total area: {0}",

Rect.getArea());

Console.WriteLine("Total paint cost: 0" , Rect.getCost(area));


Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Total area: 35
Total paint cost: $2450

Tnh a hnh trong C#


T polymorphism (tnh a hnh) ngha l c nhiu hnh thi. Trong lp trnh hng i tng, tnh
a hnh thng c din t nh l mt Interface, nhiu hm.
Tnh a hnh trong C# c th l static hoc dynamic. Trong , kiu a hnh static c th c
gi l a hnh tnh v kiu a hnh dynamic c th c gi l a hnh ng.
Trong a hnh tnh, phn phn hi ti mt hm c xc nh ti compile time. Trong khi vi a
hnh ng, n c quyt nh ti runtime.

a hnh static trong C#


K thut lin kt mt hm vi mt i tng trong thi gian bin dch c gi l Early Binding. N
cng c gi l Static Binding. C# cung cp hai k thut trin khai a hnh tnh. Chng l:

Np chng hm (Function overloading)

Np chng ton t (Operator overloading)

Chng ta s bn lun v np chng ton t trong chng sau.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 101

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Np chng hm trong C#
Bn c th c nhiu nh ngha cho cng tn hm trong cng mt phm vi. Cc nh ngha ny ca
hm phi khc nhau: nh kiu v/hoc s tham s trong danh sch tham s. Trong C#, bn khng
th np chng cc khai bo hm m ch khc nhau kiu tr v.
V d sau minh ha cch s dng hm print() in cc kiu d liu khc nhau trong C#:
using System;
namespace PolymorphismApplication
{
class Printdata
{
void print(int i)
{
Console.WriteLine("Printing int: {0}", i );
}

void print(double f)
{
Console.WriteLine("Printing float: {0}" , f);
}

void print(string s)
{
Console.WriteLine("Printing string: {0}", s);
}
static void Main(string[] args)
{
Printdata p = new Printdata();

// Call print to print integer


p.print(5);

// Call print to print float

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 102

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

p.print(500.263);

// Call print to print string


p.print("Hello C++");
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Printing int: 5
Printing float: 500.263
Printing string: Hello C++

a hnh dynamic trong C#


C# cho php bn to cc lp abstract (tru tng) m c s dng cung cp trnh trin khai
cc b lp ca mt Interface. Trnh trin khai (Implementation) c hon thnh khi mt lp k
tha k tha t n. Cc lp Abstract cha cc phng thc abstract, m c trin khai bi lp
k tha. Lp k tha ny c tnh nng chuyn dng hn.
Di y l mt s qui tc v cc lp abstract trong C#:

Bn khng th to mt Instance (s th hin) ca mt lp abstract.

Bn khng th khai bo mt phng thc abstract bn ngoi mt lp abstract.

Khi mt lp c khai bo l sealed, n khng th c k tha, cc lp abstract khng


th c khai bo l sealed.

V d sau minh ha mt lp abstract trong C#:


using System;
namespace PolymorphismApplication
{
abstract class Shape
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 103

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

public abstract int area();


}
class Rectangle:

Shape

{
private int length;
private int width;
public Rectangle( int a=0, int b=0)
{
length = a;
width = b;
}
public override int area ()
{
Console.WriteLine("Rectangle class area :");
return (width * length);
}
}

class RectangleTester
{
static void Main(string[] args)
{
Rectangle r = new Rectangle(10, 7);
double a = r.area();
Console.WriteLine("Area: {0}",a);
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Rectangle class area :
Area: 70

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 104

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Khi bn c mt hm c nh ngha trong mt lp m bn mun c trin khai mt lp c k


tha, bn s dng hm virtual trong C#. Cc hm virtual c th c trin khai mt cch khc
nhau trong lp c k tha khc nhau v vic gi nhng hm ny s c quyt nh ti runtime.
a hnh ng trong C# c trin khai bi cc lp abstract v cc hm virtual.
V d sau minh ha iu ny:
using System;
namespace PolymorphismApplication
{
class Shape
{
protected int width, height;
public Shape( int a=0, int b=0)
{
width = a;
height = b;
}
public virtual int area()
{
Console.WriteLine("Parent class area :");
return 0;
}
}
class Rectangle: Shape
{
public Rectangle( int a=0, int b=0): base(a, b)
{

}
public override int area ()
{
Console.WriteLine("Rectangle class area :");

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 105

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

return (width * height);


}
}
class Triangle: Shape
{
public Triangle(int a = 0, int b = 0): base(a, b)
{

}
public override int area()
{
Console.WriteLine("Triangle class area :");
return (width * height / 2);
}
}
class Caller
{
public void CallArea(Shape sh)
{
int a;
a = sh.area();
Console.WriteLine("Area: {0}", a);
}
}
class Tester
{

static void Main(string[] args)


{
Caller c = new Caller();
Rectangle r = new Rectangle(10, 7);
Triangle t = new Triangle(10, 5);
c.CallArea(r);

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 106

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

c.CallArea(t);
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Rectangle class area:
Area: 70
Triangle class area:
Area: 25

Np chng ton t trong C#


Operator Overloading l Np chng ton t. Bn c th ti nh ngha hoc np chng hu ht cc
ton t c sn trong C#. V th, mt lp trnh vin c th s dng cc ton t vi cc kiu t nh
ngha (user-defined). Cc ton t c np chng trong C# l cc hm vi cc tn c bit: t
kha operator c theo sau bi biu tng cho ton t ang c nh ngha. Tng t nh bt
k hm no khc, mt ton t c np chng c mt kiu tr v v mt danh sch tham s.
V d, bn xt hm sau:
public static Box operator+ (Box b, Box c)
{
Box box = new Box();
box.length = b.length + c.length;
box.breadth = b.breadth + c.breadth;
box.height = b.height + c.height;
return box;
}

Hm trn trin khai ton t cng (+) cho mt lp Box t nh ngha (user-defined). N cng cc
thuc tnh ca hai i tng Box v tr v i tng kt qu Box.

Trin khai Np chng ton t trong C#


V d di y minh ha cch trin khai np chng ton t trong C#:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 107

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

using System;
namespace OperatorOvlApplication
{
class Box
{
private double length;

// Length of a box

private double breadth;

// Breadth of a box

private double height;

// Height of a box

public double getVolume()


{
return length * breadth * height;
}

public void setLength( double len )


{
length = len;
}

public void setBreadth( double bre )


{
breadth = bre;
}

public void setHeight( double hei )


{
height = hei;
}

// Overload + operator to add two Box objects.


public static Box operator+ (Box b, Box c)
{
Box box = new Box();

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 108

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

box.length = b.length + c.length;


box.breadth = b.breadth + c.breadth;
box.height = b.height + c.height;
return box;
}

class Tester
{
static void Main(string[] args)
{
Box Box1 = new Box();

// Declare Box1 of type Box

Box Box2 = new Box();

// Declare Box2 of type Box

Box Box3 = new Box();

// Declare Box3 of type Box

double volume = 0.0;

// Store the volume of a box here

// box 1 specification
Box1.setLength(6.0);
Box1.setBreadth(7.0);
Box1.setHeight(5.0);

// box 2 specification
Box2.setLength(12.0);
Box2.setBreadth(13.0);
Box2.setHeight(10.0);

// volume of box 1
volume = Box1.getVolume();
Console.WriteLine("Volume of Box1 : {0}", volume);

// volume of box 2
volume = Box2.getVolume();

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 109

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Console.WriteLine("Volume of Box2 : {0}", volume);

// Add two object as follows:


Box3 = Box1 + Box2;

// volume of box 3
volume = Box3.getVolume();
Console.WriteLine("Volume of Box3 : {0}", volume);
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Volume of Box1 : 210
Volume of Box2 : 1560
Volume of Box3 : 5400

Ton t c th np chng v khng th np chng


trong C#
Bng di miu t cc ton t c th np chng trong C#:
Ton t

Miu t

+, -, !, ~, ++, --

Nhng ton t mt ngi ny nhn mt ton hng v c


th c np chng

+, -, *, /, %

Nhng ton t nh phn ny nhn mt ton hng v c


th c np chng

==, !=, <, >, <=, >=

Cc ton t so snh c th c np chng

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 110

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

&&, ||

Cc ton t logic iu kin khng th c np chng mt


cch trc tip

+=, -=, *=, /=, %=

Cc ton t gn khng th c np chng

=, ., ?:, ->, new, is, sizeof, typeof

Cc ton t ny khng th c np chng

V d
T cc khi nim trn, chng ta k tha v d trn v np chng thm mt s ton t trong C#:
using System;
namespace OperatorOvlApplication
{
class Box
{
private double length;

// Length of a box

private double breadth;

// Breadth of a box

private double height;

// Height of a box

public double getVolume()


{
return length * breadth * height;
}

public void setLength( double len )


{
length = len;
}

public void setBreadth( double bre )


{
breadth = bre;
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 111

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

public void setHeight( double hei )


{
height = hei;
}

// Overload + operator to add two Box objects.


public static Box operator+ (Box b, Box c)
{
Box box = new Box();
box.length = b.length + c.length;
box.breadth = b.breadth + c.breadth;
box.height = b.height + c.height;
return box;
}

public static bool operator == (Box lhs, Box rhs)


{
bool status = false;
if (lhs.length == rhs.length && lhs.height == rhs.height && lhs.breadth ==
rhs.breadth)
{
status = true;
}
return status;
}

public static bool operator !=(Box lhs, Box rhs)


{
bool status = false;
if (lhs.length != rhs.length || lhs.height != rhs.height || lhs.breadth !=
rhs.breadth)
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 112

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

status = true;
}
return status;
}

public static bool operator <(Box lhs, Box rhs)


{
bool status = false;
if (lhs.length < rhs.length && lhs.height < rhs.height && lhs.breadth < rhs.breadth)
{
status = true;
}
return status;
}

public static bool operator >(Box lhs, Box rhs)


{
bool status = false;
if (lhs.length > rhs.length && lhs.height > rhs.height && lhs.breadth > rhs.breadth)
{
status = true;
}
return status;
}

public static bool operator <=(Box lhs, Box rhs)


{
bool status = false;
if (lhs.length <= rhs.length && lhs.height <= rhs.height && lhs.breadth <=
rhs.breadth)
{
status = true;
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 113

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

return status;
}

public static bool operator >=(Box lhs, Box rhs)


{
bool status = false;
if (lhs.length >= rhs.length && lhs.height >= rhs.height && lhs.breadth >=
rhs.breadth)
{
status = true;
}
return status;
}
public override string ToString()
{
return String.Format("({0}, {1}, {2})", length, breadth, height);
}
}

class Tester
{
static void Main(string[] args)
{
Box Box1 = new Box();

// Declare Box1 of type Box

Box Box2 = new Box();

// Declare Box2 of type Box

Box Box3 = new Box();

// Declare Box3 of type Box

Box Box4 = new Box();


double volume = 0.0;

// Store the volume of a box here

// box 1 specification
Box1.setLength(6.0);
Box1.setBreadth(7.0);
Box1.setHeight(5.0);

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 114

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

// box 2 specification
Box2.setLength(12.0);
Box2.setBreadth(13.0);
Box2.setHeight(10.0);

//displaying the Boxes using the overloaded ToString():


Console.WriteLine("Box 1: {0}", Box1.ToString());
Console.WriteLine("Box 2: {0}", Box2.ToString());

// volume of box 1
volume = Box1.getVolume();
Console.WriteLine("Volume of Box1 : {0}", volume);

// volume of box 2
volume = Box2.getVolume();
Console.WriteLine("Volume of Box2 : {0}", volume);

// Add two object as follows:


Box3 = Box1 + Box2;
Console.WriteLine("Box 3: {0}", Box3.ToString());

// volume of box 3
volume = Box3.getVolume();
Console.WriteLine("Volume of Box3 : {0}", volume);

//comparing the boxes


if (Box1 > Box2)
Console.WriteLine("Box1 is greater than Box2");
else
Console.WriteLine("Box1 is

greater than Box2");

if (Box1 < Box2)

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 115

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Console.WriteLine("Box1 is less than Box2");


else
Console.WriteLine("Box1 is not less than Box2");

if (Box1 >= Box2)


Console.WriteLine("Box1 is greater or equal to Box2");
else
Console.WriteLine("Box1 is not greater or equal to Box2");

if (Box1 <= Box2)


Console.WriteLine("Box1 is less or equal to Box2");
else
Console.WriteLine("Box1 is not less or equal to Box2");

if (Box1 != Box2)
Console.WriteLine("Box1 is not equal to Box2");
else
Console.WriteLine("Box1 is not greater or equal to Box2");
Box4 = Box3;

if (Box3 == Box4)
Console.WriteLine("Box3 is equal to Box4");
else
Console.WriteLine("Box3 is not equal to Box4");

Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Box 1: (6, 7, 5)
Box 2: (12, 13, 10)

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 116

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Volume of Box1 : 210


Volume of Box2 : 1560
Box 3: (18, 20, 15)
Volume of Box3 : 5400
Box1 is not greater than Box2
Box1 is less than Box2
Box1 is not greater or equal to Box2
Box1 is less or equal to Box2
Box1 is not equal to Box2
Box3 is equal to Box4

Interface trong C#
Mt Interface c nh ngha nh l mt giao c c tnh cht c php (syntactical contract) m
tt c lp k tha Interface nn theo. Interface nh ngha phn L g ca giao c v cc lp
k tha nh ngha phn Cch no ca giao c .
Interface nh ngha cc thuc tnh, phng thc v s kin, m l cc thnh vin ca Interface .
Cc Interface ch cha khai bo ca cc thnh vin ny. Vic nh ngha cc thnh vin l trch
nhim ca lp k tha. N thng gip ch trong vic cung cp mt Cu trc chun m cc lp k
tha nn theo.

Khai bo Interface trong C#


Cc Interface c khai bo bi s dng t kha interface trong C#. N tng t nh khai bo
lp. Theo mc nh, cc lnh Interface l puclic. V d sau minh ha mt khai bo Interface trong
C#:
public interface ITransactions
{
// interface members
void showTransaction();
double getAmount();
}

V d
Sau y l v d minh ha trnh trin khai ca Interface trn:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 117

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System;

namespace InterfaceApplication
{
public interface ITransactions
{
// interface members
void showTransaction();
double getAmount();
}

public class Transaction : ITransactions


{
private string tCode;
private string date;
private double amount;
public Transaction()
{
tCode = " ";
date = " ";
amount = 0.0;
}

public Transaction(string c, string d, double a)


{
tCode = c;
date = d;
amount = a;
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 118

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

public double getAmount()


{
return amount;
}

public void showTransaction()


{
Console.WriteLine("Transaction: {0}", tCode);
Console.WriteLine("Date: {0}", date);
Console.WriteLine("Amount: {0}", getAmount());
}
}
class Tester
{
static void Main(string[] args)
{
Transaction t1 = new Transaction("001", "8/10/2012", 78900.00);
Transaction t2 = new Transaction("002", "9/10/2012", 451900.00);
t1.showTransaction();
t2.showTransaction();
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Transaction: 001
Date: 8/10/2012
Amount: 78900
Transaction: 002
Date: 9/10/2012
Amount: 451900

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 119

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Namespace trong C#
Mt namespace trong C# c thit k cung cp mt cch gi mt tp hp cc tn c
phn bit ring r nhau. Cc tn lp c khai bo trong mt namespace khng xung t vi cng
tn ca lp c khai bo trong namespace khc.

nh ngha mt Namespace trong C#


Mt nh ngha namespace trong C# bt u vi t kha namespace c theo sau bi tn ca
namespace , nh sau:
namespace namespace_name
{
// code declarations
}

gi phin bn kch hot ca namespace ca hm hoc bin, bn ph thm vo sau tn ca


namespace nh sau:
namespace_name.item_name;

V d sau minh ha cch s dng ca cc namespace trong C#:


using System;
namespace first_space
{
class namespace_cl
{
public void func()
{
Console.WriteLine("Inside first_space");
}
}
}

namespace second_space
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 120

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

class namespace_cl
{
public void func()
{
Console.WriteLine("Inside second_space");
}
}
}

class TestClass
{
static void Main(string[] args)
{
first_space.namespace_cl fc = new first_space.namespace_cl();
second_space.namespace_cl sc = new second_space.namespace_cl();
fc.func();
sc.func();
Console.ReadKey();
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Inside first_space
Inside second_space

T kha using trong C#


T kha using biu din rng chng trnh ang s dng cc tn trong namespace cho. V d:
chng ta ang s dng System namespace trong cc chng trnh ca chng ta.
LpConsole c nh ngha y. Chng ta vit:
Console.WriteLine ("Hello there");

Chng ta c th vit tn y l:
System.Console.WriteLine("Hello there");

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 121

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Bn cng c th trnh vic ph thm vo cc namespace bi s dng directive


l usingnamespace. Ch th ny ni cho compiler rng phn code tip theo ang s dng cc tn
trong namespace xc nh.
Gi vit li v d trn bi s dng using directive trong C#:
using System;
using first_space;
using second_space;

namespace first_space
{
class abc
{
public void func()
{
Console.WriteLine("Inside first_space");
}
}
}

namespace second_space
{
class efg
{
public void func()
{
Console.WriteLine("Inside second_space");
}
}
}

class TestClass
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 122

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

static void Main(string[] args)


{
abc fc = new abc();
efg sc = new efg();
fc.func();
sc.func();
Console.ReadKey();
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Inside first_space
Inside second_space

Lng Namespace trong C#


Trong C#, bn c th nh ngha mt namespace bn trong cc namespace khc, nh sau:
namespace namespace_name1
{
// code declarations
namespace namespace_name2
{
// code declarations
}
}

Bn c th truy cp cc thnh vin ca cc namespace c lng vo nhau ny bi s dng ton


t dot (.) trong C#, nh sau:
using System;
using first_space;
using first_space.second_space;

namespace first_space
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 123

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

class abc
{
public void func()
{
Console.WriteLine("Inside first_space");
}
}
namespace second_space
{
class efg
{
public void func()
{
Console.WriteLine("Inside second_space");
}
}
}
}

class TestClass
{
static void Main(string[] args)
{
abc fc = new abc();
efg sc = new efg();
fc.func();
sc.func();
Console.ReadKey();
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Inside first_space

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 124

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Inside second_space

Ch th tin x l trong C#
Cc ch th tin x l (Preprocessor Directive) cung cp ch lnh ti compiler tin x l thng tin
trc khi s bin dch thc s bt u.
Tt c ch th tin x l trong C# bt u vi #, v ch c cc k t white-space c th xut hin
trc mt ch th tin x l trong mt dng. Cc ch th tin x l trong C# khng l cc lnh, v th
chng khng kt thc vi mt du chm phy (;).
B bin dch ca C# khng c mt b tin x l ring bit, tuy nhin, cc ch th ny c x l nh
khi thc s c mt b tin x l ring vy. Trong C#, cc ch th tin x l c s dng gip
ch vic bin dch c iu kin. Khng ging cc ch th tin x l trong C v C++, chng khng
c s dng to cc macro. Mt ch th tin x l phi ch l mt ch lnh trn mt dng.

Cc ch th tin x l trong C#
Di y l bng lit k cc ch th tin x l c sn trong C#:
Preprocessor
Directive

Miu t

#define

N nh ngha mt dy k t, c gi l cc biu tng

#undef

N cho php bn khng nh ngha (undefine) mt biu tng

#if

N cho php kim tra mt biu tng hoc nhiu biu tng thy nu
chng c lng l true

#else

N cho php to mt ch th c iu kin phc hp, cng vi #if

#elif

N cho php to mt ch th c iu kin phc hp

#endif

Xc nh phn cui ca mt ch th c iu kin (conditional directive)

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 125

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

#line

N cho php bn sa i s dng ca compiler v (ty ) tn file cho Error


v Warning

#error

N cho php to mt error t mt v tr c th trong code ca bn

#warning

N cho php to mt mc cnh bo t mt v tr c th trong code ca


bn

#region

N cho php bn xc nh mt khi code m bn c th m rng hoc thu


gn bi s dng c im ca Visual Studio Code Editor

#endregion

N nh du phn cui ca mt khi #region

Ch th tin x l #define trong C#


Ch th tin x l #define trong C# to cc hng biu tng.
#define cho php bn to mt biu tng nh vy, bi s dng biu tng dng biu thc c
truyn ti ch th tin x l #if, biu thc c lng l true. C php ca n nh sau:
#define symbol

V d sau minh ha iu ny:


#define PI
using System;
namespace PreprocessorDAppl
{
class Program
{
static void Main(string[] args)
{
#if (PI)
Console.WriteLine("PI is defined");
#else
Console.WriteLine("PI is not defined");

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 126

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

#endif
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


PI is defined

Ch th c iu kin (Conditional Directive) trong C#


Bn c th s dng ch th tin x l #if trong C# to mt ch th c iu kin (Conditional
Directive). Cc ch th c iu kin l hu ch khi kim tra mt biu tng hoc cc biu tng
kim tra nu chng c lng l true. Nu chng c lng l true, compiler c lng tt c
code gia ch th #if v ch th tip theo.
C php cho ch th c iu kin trong C# l:
#if symbol [operator symbol]...

Ti y, symbol l tn ca biu tng bn mun kim tra. Bn cng c th s dng true v false
hoc ph thm vo sau biu tng vi ton t ph nh.
operator symbol l ton t c s dng c lng biu tng . Cc ton t c th l mt
trong cc:

== (bng)

!= (khng bng)

&& (v)

|| (hoc)

Bn cng c th nhm cc biu tng v ton t bi cc du ngoc n. Cc ch th c iu kin


c s dng bin dch code cho debug hoc khi bin dch cho mt s nh cu hnh c th.
Mt ch th c iu kin trong C# bt u vi mt ch th tin x l #if phi c kt thc mt cch
r rng bi mt ch th #endif.
V d sau minh ha s s dng cc ch th c iu kin trong C#:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 127

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

#define DEBUG
#define VC_V10
using System;
public class TestClass
{
public static void Main()
{
#if (DEBUG && !VC_V10)
Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && VC_V10)
Console.WriteLine("VC_V10 is defined");
#elif (DEBUG && VC_V10)
Console.WriteLine("DEBUG and VC_V10 are defined");
#else
Console.WriteLine("DEBUG and VC_V10 are not defined");
#endif
Console.ReadKey();
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


DEBUG and VC_V10 are defined

Regular Expression trong C#


Mt regular expression l mt pattern m c th c so khp vi mt vn bn u vo. .Net
Framework cung cp mt phng tin regular expression m cho php so khp vi nh th. Trong
C#, mt pattern gm mt hoc nhiu hng k t, ton t, hoc construct.

Construct cho nh ngha Regular Expression trong C#


C nhiu loi k t, ton t v construct a dng m gip bn nh ngha Regular Expression trong
C#. Bn theo cc link sau c chi tit v cc construct ny.

Character escape

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 128

http://vietjack.com/csharp/index.jsp

Lp Character

Anchor

Grouping construct

Quantifier

Backreference construct

Alternation construct

Substitution

Miscellaneous constructs

Copyright vietjack.com

Lp Regex trong C#
Lp Regex trong C# c s dng biu din mt Regular Expression. N c cc phng thc
c s dng ph bin sau:
STT

Phng thc

public bool IsMatch(string input)


Ch rng c hay khng Regular Expression cho trong Regex constructor ny tm
thy mt match trong chui u vo xc nh

public bool IsMatch(string input, int startat)


Ch rng c hay khng Regular Expression cho trong Regex constructor ny tm
thy mt match trong chui u vo xc nh, bt u ti v tr startat cho trong
chui

public static bool IsMatch(string input, string pattern)


Ch rng c hay khng Regular Expression cho tm thy mt match trong chui u
vo xc nh

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 129

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

public MatchCollection Matches(string input)

Tm kim chui u vo xc nh v tt c s xut hin ca mt Regular


Expression

public string Replace(string input, string replacement)

Trong mt chui u vo xc nh, thay th tt c chui m so khp vi mt


Regular Expression pattern vi mt chui thay th cho

public string[] Split(string input)

Chia mt chui u vo thnh mt mng cc chui ph ti v tr c nh ngha bi


mt Regular Expression pattern xc nh trong Regex constructor
c danh sch y cc phng thc v thuc tnh, bn vui lng c Microsoft Documentation
v C#.

V d 1
V d sau so khp vi cc t m bt u vi S:
using System;
using System.Text.RegularExpressions;

namespace RegExApplication
{
class Program
{
private static void showMatch(string text, string expr)
{
Console.WriteLine("The Expression: " + expr);
MatchCollection mc = Regex.Matches(text, expr);
foreach (Match m in mc)
{
Console.WriteLine(m);
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 130

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

static void Main(string[] args)


{
string str = "A Thousand Splendid Suns";

Console.WriteLine("Matching words that start with 'S': ");


showMatch(str, @"\bS\S*");
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Matching words that start with 'S':
The Expression: \bS\S*
Splendid
Suns

V d 2
V d sau so khp vi cc t m bt u vi m v kt thc vi e:
using System;
using System.Text.RegularExpressions;

namespace RegExApplication
{
class Program
{
private static void showMatch(string text, string expr)
{
Console.WriteLine("The Expression: " + expr);
MatchCollection mc = Regex.Matches(text, expr);
foreach (Match m in mc)

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 131

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

{
Console.WriteLine(m);
}
}
static void Main(string[] args)
{
string str = "make maze and manage to measure it";

Console.WriteLine("Matching words start with 'm' and ends with 'e':");


showMatch(str, @"\bm\S*e\b");
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Matching words start with 'm' and ends with 'e':
The Expression: \bm\S*e\b
make
maze
manage
measure

V d 3
V d sau thay th cc white space:
using System;
using System.Text.RegularExpressions;

namespace RegExApplication
{
class Program
{
static void Main(string[] args)

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 132

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

{
string input = "Hello

World

";

string pattern = "\\s+";


string replacement = " ";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(input, replacement);

Console.WriteLine("Original String: {0}", input);


Console.WriteLine("Replacement String: {0}", result);
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Original String: Hello World
Replacement String: Hello World

X l ngoi l (Exception Handling) trong


C#
Mt Exception (ngoi l) l mt vn xut hin trong khi thc thi mt chng trnh. Mt Exception
trong C# l mt phn hi v mt tnh hung ngoi l m xut hin trong khi mt chng trnh ang
chy, v d nh chia cho s 0.
Exception cung cp mt cch truyn iu khin t mt phn ca mt chng trnh ti phn
khc. Exception Handling (X l ngoi l) trong C# c xy dng da trn 4 t kha
l: try, catch, finally, v throw.

try: Mt khi try nhn din mt khi code m cc exception c th c kch hot. N
c theo sau bi mt hoc nhiu khi catch.

catch: Mt chng trnh bt mt Exception vi mt Exception Handler ti v tr trong mt


chng trnh ni bn mun x l vn . T kha catch trong C# ch dn vic bt mt
exception.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 133

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

finally: Mt khi finally c s dng thc thi mt tp hp lnh cho, c hay khng
mt exception c nm hoc khng c nm. V d, nu bn m mt file, n phi c
ng, nu khng s c mt exception c to ra.

throw: Mt chng trnh nm mt exception khi c mt vn xut hin. iu ny c


thc hin bi s dng t kha throw trong C#.

C php
Gi s mt khi to mt Exeption, mt phng thc bt mt exception bi s dng kt hp cc t
kha try v catch. Mt khi try/catch c t xung quanh code m c th to mt exception. Code
bn trong mt khi try/catch c xem nh l code c bo v, v c php s dng try/catch
trong C# nh sau:
try
{
// statements causing exception
}
catch( ExceptionName e1 )
{
// error handling code
}
catch( ExceptionName e2 )
{
// error handling code
}
catch( ExceptionName eN )
{
// error handling code
}
finally
{
// statements to be executed
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 134

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Bn c th lit k nhiu lnh catch bt cc kiu exception khc nhau trong trng hp khi try
ca bn xut hin nhiu hn mt exception trong cc tnh hung khc nhau.

Lp Exception trong C#
Cc Exception trong C# c biu din bi cc lp. Cc lp Exception trong C# ch yu c k
tha mt cch trc tip hoc khng trc tip t lp System.Exception trong C#. Mt s lp
Exception

tha

lp

System.Exception

cc

lpSystem.ApplicationException v System.SystemException.
Lp System.ApplicationException h tr cc exception c to bi cc chng trnh ng
dng. V th, cc exception c nh ngha bi lp trnh vin nn k tha t lp ny.
Lp System.SystemException l lp c s cho tt c system exception tin nh ngha.
Bng

sau

cung

cp

mt

lp

Exception

tin

nh

ngha

tha

lpSytem.SystemException trong C#:


Lp Exception

Miu t

System.IO.IOException

X l cc I/O error

System.IndexOutOfRangeException

X l cc li c to khi mt phng thc tham


chiu ti mt ch mc bn ngoi dy mng

System.ArrayTypeMismatchException

X l cc li c to khi kiu l khng ph hp vi


kiu mng

System.NullReferenceException

X l cc li c to t vic tham chiu mt i


tng null

System.DivideByZeroException

X l cc li c to khi chia cho s 0

System.InvalidCastException

X l li c to trong khi p kiu

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 135

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

System.OutOfMemoryException

X l li c to t vic thiu b nh ri

System.StackOverflowException

X l li c to t vic trn ngn xp (stack)

X l ngoi l ( Exception Handling) trong C#


C# cung cp mt gii php mang tnh cu trc cao x l ngoi l trong form cc khi try v
catch. S dng cc khi ny, cc lnh chng trnh c phn bit ring r vi cc lnh x l
ngoi l trong C#.
Nhng khi x l ngoi l ny c trin khai bi s dng cc t kha try, catch v finallytrong
C#. V d sau nm mt exception khi chia cho s 0.
using System;
namespace ErrorHandlingApplication
{
class DivNumbers
{
int result;
DivNumbers()
{
result = 0;
}
public void division(int num1, int num2)
{
try
{
result = num1 / num2;
}
catch (DivideByZeroException e)
{
Console.WriteLine("Exception caught: {0}", e);
}
finally

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 136

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

{
.WriteLine("Result: {0}", result);
}
}
static void Main(string[] args)
{
DivNumbers d = new DivNumbers();
d.division(25, 0);
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Exception caught: System.DivideByZeroException: Attempted to divide by zero.
at ...
Result: 0

To User-Defined Exception trong C#


Bn cng c th nh ngha exception cho ring bn. Cc lp User-Defined Exception c k
tha t lp ApplicationException trong C#. V d sau minh ha iu ny:
using System;
namespace UserDefinedException
{
class TestTemperature
{
static void Main(string[] args)
{
Temperature temp = new Temperature();
try
{
temp.showTemp();
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 137

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

catch(TempIsZeroException e)
{
Console.WriteLine("TempIsZeroException: {0}", e.Message);
}
Console.ReadKey();
}
}
}

public class TempIsZeroException: ApplicationException


{
public TempIsZeroException(string message): base(message)
{
}
}

public class Temperature


{
int temperature = 0;
public void showTemp()
{
if(temperature == 0)
{
throw (new TempIsZeroException("Zero Temperature found"));
}
else
{
Console.WriteLine("Temperature: {0}", temperature);
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 138

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

TempIsZeroException: Zero Temperature found

Nm cc Object trong C#
Bn c th nm mt i tng nu n: hoc trc tip hoc gin tip c k tha t
lpSystem.Exception trong C#. Bn c th s dng mt lnh throw trong khi catch nm i
tng hin din :
Catch(Exception e)
{
...
Throw e
}

File I/O trong C#


Mt file l mt tp hp d liu c lu gi trong mt disk vi mt tn c th v mt path th mc.
Khi mt file c m c hoc ghi, n tr thnh mt stream.
V c bn, stream l dy cc byte truyn qua path. C hai stream quan trng: Input
streamv Output stream. Input stream c s dng c d liu t file (hot ng read) v
Output stream c s dng ghi vo trong file (hot ng write).

Lp I/O trong C#
System.IO namespace c nhiu lp a dng m c s dng thc hin cc hot ng khc
nhau vi File, nh to v xa file, c v ghi mt File, ng mt File,
Bng sau hin th mt s lp non-abstract c s dng ph bin trong System.IO namespace
trong C#:
I/O Class

Miu t

BinaryReader

c d liu gc (primitive data) t mt binary stream

BinaryWriter

Ghi d liu gc trong nh dng nh phn

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 139

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

BufferedStream

Mt ni lu gi tm thi cho mt stream

Directory

Gip ch trong vic thao tc mt cu trc th mc

DirectoryInfo

c s dng thc hin cc hot ng trn cc th mc

DriveInfo

Cung cp thng tin cho cc Drive

File

Gip ch trong vic thao tc cc File

FileInfo

c s dng thc hin cc hot ng trn cc File

FileStream

c s dng c v ghi bt k v tr no trong mt File

MemoryStream

c s dng truy cp ngu nhin ti stream c lu gi trong


b nh

Path

Thc hin cc hot ng trn thng tin path

StreamReader

c s dng c cc k t t mt stream

StreamWriter

c s dng ghi cc k t ti mt stream

StringReader

c s dng c t mt string buffer

StringWriter

c s dng ghi vo mt string buffer

Lp FileStream trong C#
Lp FileStream trong System.IO namespace trong C# gip trong vic c t, ghi v ng cc
File. Lp ny k tha t lp abstract l Stream.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 140

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Bn cn to mt i tng FileStream to mt File mi hoc m mt File ang tn ti. C php


to mt i tng FileStream trong C# nh sau:
FileStream <object_name> = new FileStream( <file_name>, <FileMode Enumerator>, <FileAccess
Enumerator>, <FileShare Enumerator>);

V d: chng ta to mt i tng FileStream l F c mt File vi tn sample.txt, nh sau:


FileStream F = new FileStream("sample.txt", FileMode.Open, FileAccess.Read, FileShare.Read);

Tham s

Miu t

FileMode

FileMode enumerator nh ngha cc phng thc a dng m cc


File. Cc thnh vin ca FileMode enumerator l:

Append: N m mt File ang tn ti v t con tr ti phn cui


ca File, hoc to File, nu File cha tn ti

Create: N to mt File mi

CreateNew: N xc nh ti H iu hnh rng n nn to mt


File mi

Open: N m mt File ang tn ti

OpenOrCreate: N xc nh ti H iu hnh rng n nn m mt


File nu n tn ti, nu khng th n nn to mt File mi

Truncate: N m mt File ang tn ti v truncate (ct) kch c


ca n v 0 byte

FileAccess

FileShare

FileAccess enumerators c cc thnh vin l: Read, ReadWrite vWrite.

FileShare enumerators c cc thnh vin sau:

Inheritable: N cho php mt File truyn tnh k tha ti cc tin


trnh con

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 141

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

None: N t chi vic chia s File hin ti

Read: N cho php m File c

ReadWrite: N cho php m File c v ghi

Write: N cho php m File ghi

V d
Di y l v d minh ha cch s dng ca lp FileStream trong C#:
using System;
using System.IO;

namespace FileIOApplication
{
class Program
{
static void Main(string[] args)
{
FileStream F = new FileStream("test.dat", FileMode.OpenOrCreate,
FileAccess.ReadWrite);
for (int i = 1; i <= 20; i++)
{
F.WriteByte((byte)i);
}

F.Position = 0;
for (int i = 0; i <= 20; i++)
{
Console.Write(F.ReadByte() + " ");
}
F.Close();
Console.ReadKey();

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 142

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -1

Hot ng File nng cao trong C#


V d trc minh ha cc hot ng n gin trn File trong C#. Tuy nhin, li dng ti a sc
mnh ca cc lp System.IO trong C#, bn cn bit cc thuc tnh v phng thc c s dng
ph bin v cc lp ny.
Ch v Miu t

c v ghi Text File trong C#


Lp StreamReader v StreamWriter gip thc hin vic c v ghi cc File vn bn

c v ghi File nh phn trong C#


Lp BinaryReader v BinaryWriter gip thc hin vic c v ghi cc File nh phn

Thao tc Windows file system trong C#


N cung cp cho lp trnh vin C# kh nng duyt v xc nh v tr cc File v th mc trong
Windows

Attribute trong C#
Mt attribute trong C#, l mt th tng thut, c s dng truyn thng tin ti runtime v
cc hnh vi ca cc phn t a dng nh cc lp, phng thc, cu trc, enum, assembly,
trong chng trnh ca bn. Bn c th thm thng tin tng thut ti mt chng trnh bi vic
s dng mt Attribute. Mt th tng thut c miu t bi cc du ngoc mc vung ([]) c
t bn trn phn t m n c s dng cho.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 143

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Cc Attribute c s dng thm metadata, v d nh ch lnh bin dch v thng tin khc nh
comment, miu t, phng thc v cc lp ti mt chng trnh. .Net Framework cung cp hai
kiu Attribute: cc Attribute c nh ngha trc v cc Custom Attribute.

Xc nh mt Attribute trong C#
C php xc nh mt Attribute trong C# nh sau:
[attribute(positional_parameters, name_parameter = value, ...)]
element

Tn ca Attribute v gi tr ca n c xc nh bn trong du ngoc vung, trc phn t t


thuc tnh c p dng cho. positional_parameters xc nh thng tin thit yu
vname_parameter xc nh thng tin ty .

Attribute c nh ngha trc trong C#


.Net Framework cung cp 3 Attribute c nh ngha trc:

AttributeUsage

Conditional

Obsolete

AttributeUsage trong C#
Attribute c nh ngha trc AttributeUsage miu t cch mt lp custom Attribute c th
c s dng. N xc nh kiu ca cc item, m t Attribute c th p dng cho.
C php xc nh Attribute ny trong C# nh sau:
[AttributeUsage(
validon,
AllowMultiple=allowmultiple,
Inherited=inherited
)]

Ti y:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 144

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Tham s validon xc nh cc phn t ngn ng m Attribute c th c t. N l mt s


t

hp

gi

tr

ca

mt AttributeTargets enumerator.

Gi

tr

mc

nh

lAttributeTargets.All.

Tham s allowmultiple (ty ) cung cp gi tr cho thuc tnh AllowMultiple ca attribute


ny, mt gi tr Boolean. Nu iu ny l true, Attribute l multiuse. Gi tr mc nh l false
(tc l single-use).

Tham s inherited (ty ) cung cp gi tr cho thuc tnh Inherited ca attribute ny, mt gi
tr Boolean. Nu n l true, Attribute c k tha bi cc lp k tha. Gi tr mc nh l
false (khng c k tha).

V d:
[AttributeUsage(AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Feild |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

Conditional trong C#
Attribute tin nh ngha ny nh du mt phng thc c iu kin m s thc thi ca n ph
thuc vo mt tin trnh tin x l nh danh cho.
N to s bin dch c iu kin ca cc li gi phng thc, ph thuc vo gi tr cho,
nh Debug hoc Trace. V d: n hin th cc gi tr ca cc bin trong khi debug mt code.
C php xc nh Attribute ny trong C# l nh sau:
[Conditional(
conditionalSymbol
)]

V d:
[Conditional("DEBUG")]

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 145

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Sau y l v d minh ha Conditional trong C#:


#define DEBUG
using System;
using System.Diagnostics;

public class Myclass


{
[Conditional("DEBUG")]
public static void Message(string msg)
{
Console.WriteLine(msg);
}
}

class Test
{
static void function1()
{
Myclass.Message("In Function 1.");
function2();
}
static void function2()
{
Myclass.Message("In Function 2.");
}

public static void Main()


{
Myclass.Message("In Main function.");
function1();
Console.ReadKey();
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 146

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Khi code trn c bin dch v thc thi, n s cho kt qu:


In Main function
In Function 1
In Function 2

Obsolete trong C#
Attribute tin nh ngha ny trong C# nh du mt thc th chng trnh m khng nn c s
dng. N cho bn kh nng thng bo cho compiler loi b mt phn t target c th. V d,
khi mt phng thc mi ang c s dng trong mt lp v nu bn vn mun gi li phng
thc c trong lp ny, bn c th nh du n l obsolete bng vic hin th mt thng bo l
phng thc mi nn c s dng, thay cho phng thc c.
C php xc nh Attribute ny trong C# l nh sau:
[Obsolete(
message
)]
[Obsolete(
message,
iserror
)]

Ti y,

Tham s message l mt chui miu t l do ti sao item l obsolete v ci g c s


dng thay cho n.

Tham s iserror l mt gi tr Boolean. Nu gi tr ca n l true, compiler nn i x s s


dng ca item ny nh l mt li. Gi tr mc nh l false (tc l compiler to mt
warning).

V d sau minh ha obsolete trong C#:


using System;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 147

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

public class MyClass


{
[Obsolete("Don't use OldMethod, use NewMethod instead", true)]
static void OldMethod()
{
Console.WriteLine("It is the old method");
}
static void NewMethod()
{
Console.WriteLine("It is the new method");
}
public static void Main()
{
OldMethod();
}
}

Khi bn c bin dch chng trnh trn, compiler s cho mt thng bo li:
Don't use OldMethod, use NewMethod instead

To Custom Attribute trong C#


Cn gi l Attribute ty bin hay Attribute do ngi dng t nh ngha. .Net Framework cho php
to cc Custom Attribute m c th c s dng lu gi thng tin tng thut v c th c
thu nhn ti runtime. Thng tin ny c th lin quan ti bt k phn t target no ph thuc vo
chun thit k v yu cu ng dng.
To v s dng Custom Attribute trong C# bao gm 4 bc sau:

Khai bo mt Custom Attribute

Xy dng Custom Attribute

p dng Attribute trn mt phn t chng trnh target

Truy cp cc Attribute thng qua Reflection

Bc cui cng lin quan ti vic vit mt chng trnh n gin c qua metadata tm ra
cc notation a dng. Metadata l d liu hoc thng tin c s dng miu t d liu khc.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 148

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Chng trnh ny nn s dng cc Reflection truy cp cc Attribute ti runtime. Chng ta s


bn lun iu ny trong chng ti.

Khai bo mt Custom Attribute trong C#


Mt Custom Attribute mi nn c k tha t lp System.Attribute trong C#. V d:
//a custom attribute BugFix to be assigned to a class and its members
[AttributeUsage(AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

public class DeBugInfo : System.Attribute

Trong code trn, chng ta khai bo mt Custom Attribute l DeBugInfo.

Xy dng Custom Attribute trong C#


Chng ta cng xy dng Custom Attribute c tn l DeBugInfo, m lu gi thng tin thu c bi
vic debug bt k chng trnh no. N c th gi thng tin sau:

S hiu code bug

Tn lp trnh vin, ngi nhn din bug

Ngy review cui cng ca code

Mt thng bo dng chui lu gi cc lu ca lp trnh vin

Lp DeBugInfo c 3 thuc tnh private lu gi 3 thng tin u tin v mt thuc tnh public
lu gi thng bo . V th, s hiu bug, tn lp trnh vin, v ngy review l cc tham s v tr
tng ng ca lp DeBugInfo v thng bo l mt tham s ty .
Mi Attribute phi c t nht mt constructor. Cc tham s v tr tng ng nn c truyn thng
qua constructor . V d sau minh ha lp DeBugInfo trn:
//a custom attribute BugFix to be assigned to a class and its members
[AttributeUsage(AttributeTargets.Class |

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 149

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

public class DeBugInfo : System.Attribute


{
private int bugNo;
private string developer;
private string lastReview;
public string message;

public DeBugInfo(int bg, string dev, string d)


{
this.bugNo = bg;
this.developer = dev;
this.lastReview = d;
}

public int BugNo


{
get
{
return bugNo;
}
}

public string Developer


{
get
{
return developer;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 150

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

}
}

public string LastReview


{
get
{
return lastReview;
}
}

public string Message


{
get
{
return message;
}
set
{
message = value;
}
}
}

p dng Custom Attribute trong C#


Custom Attribute trong C# c p dng bng vic t n ngay trc target ca n:
[DeBugInfo(45, "Zara Ali", "12/8/2012", Message = "Return type mismatch")]
[DeBugInfo(49, "Nuha Ali", "10/10/2012", Message = "Unused variable")]
class Rectangle
{
//member variables
protected double length;
protected double width;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 151

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

public Rectangle(double l, double w)


{
length = l;
width = w;
}
[DeBugInfo(55, "Zara Ali", "19/10/2012", Message = "Return type mismatch")]

public double GetArea()


{
return length * width;
}
[DeBugInfo(56, "Zara Ali", "19/10/2012")]

public void Display()


{
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}

Trong chng ti, chng ta thu hi thng tin Attribute bi s dng mt i tng lp Reflection
trong C#.

Reflection trong C#
Cc i tng Reflection c s dng thu c thng tin kiu ti runtime. Cc lp ny cung
cp truy cp ti metadata ca mt chng trnh ang chy l trongSystem.Reflection namespace
trong C#.
System.Reflection namespace trong C# cha cc lp m cho php bn thu c thng tin v
ng dng v thm cc kiu, gi tr, v cc i tng mt cch ng ti Application.

Cc ng dng ca Reflection
Reflection c cc ng dng sau:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 152

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

N cho php quan st thng tin attribute ti runtime.

N cho php thm tra cc kiu a dng trong mt Assembly v thuyt minh cc kiu ny.

N cho php Late Binding ti cc phng thc v cc thuc tnh.

N cho php to cc kiu mi ti runtime v sau thc hin mt s tc v bi s dng


nhng kiu ny.

Quan st Metadata trong C#


Chng ta cp trong chng trc rng vi vic s dng Reflection, bn c th quan st
thng tin attribute.
i tng MemberInfo ca lp System.Reflection trong C# cn c khi to pht hin ra
cc attribute c lin kt vi mt lp. lm iu ny, bn nh ngha mt i tng ca lp
target, nh:
System.Reflection.MemberInfo info = typeof(MyClass);

V d sau minh ha iu ny:


using System;

[AttributeUsage(AttributeTargets.All)]
public class HelpAttribute : System.Attribute
{
public readonly string Url;

public string Topic

// Topic is a named parameter

{
get
{
return topic;
}
set
{
topic = value;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 153

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

}
}

public HelpAttribute(string url)

// url is a positional parameter

{
this.Url = url;
}
private string topic;
}

[HelpAttribute("Information on the class MyClass")]


class MyClass
{
}
namespace AttributeAppl
{
class Program
{
static void Main(string[] args)
{
System.Reflection.MemberInfo info = typeof(MyClass);
object[] attributes = info.GetCustomAttributes(true);
for (int i = 0; i < attributes.Length; i++)
{
System.Console.WriteLine(attributes[i]);
}

Console.ReadKey();
}
}
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 154

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Khi n c bin dch v thc thi, n hin th tn ca cc custom attribute c nh km ti


lp MyClass:
HelpAttribute

V d
Trong v d ny, chng ta s dng attribute l DeBugInfo c to trong chng trc v s dng
Reflection c metadata trong Rectangle class.
using System;
using System.Reflection;

namespace BugFixApplication
{
//a custom attribute BugFix to be
//assigned to a class and its members
[AttributeUsage(AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

public class DeBugInfo : System.Attribute


{
private int bugNo;
private string developer;
private string lastReview;
public string message;

public DeBugInfo(int bg, string dev, string d)


{
this.bugNo = bg;
this.developer = dev;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 155

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

this.lastReview = d;
}

public int BugNo


{
get
{
return bugNo;
}
}

public string Developer


{
get
{
return developer;
}
}

public string LastReview


{
get
{
return lastReview;
}
}

public string Message


{
get
{
return message;
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 156

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

set
{
message = value;
}
}
}
[DeBugInfo(45, "Zara Ali", "12/8/2012", Message = "Return type mismatch")]
[DeBugInfo(49, "Nuha Ali", "10/10/2012", Message = "Unused variable")]

class Rectangle
{
//member variables
protected double length;
protected double width;
public Rectangle(double l, double w)
{
length = l;
width = w;
}
[DeBugInfo(55, "Zara Ali", "19/10/2012", Message = "Return type mismatch")]
public double GetArea()
{
return length * width;
}
[DeBugInfo(56, "Zara Ali", "19/10/2012")]
public void Display()
{
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}//end class Rectangle

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 157

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

class ExecuteRectangle
{
static void Main(string[] args)
{
Rectangle r = new Rectangle(4.5, 7.5);
r.Display();
Type type = typeof(Rectangle);

//iterating through the attribtues of the Rectangle class


foreach (Object attributes in type.GetCustomAttributes(false))
{
DeBugInfo dbi = (DeBugInfo)attributes;
if (null != dbi)
{
Console.WriteLine("Bug no: {0}", dbi.BugNo);
Console.WriteLine("Developer: {0}", dbi.Developer);
Console.WriteLine("Last Reviewed: {0}", dbi.LastReview);
Console.WriteLine("Remarks: {0}", dbi.Message);
}
}

//iterating through the method attribtues


foreach (MethodInfo m in type.GetMethods())
{
foreach (Attribute a in m.GetCustomAttributes(true))
{
DeBugInfo dbi = (DeBugInfo)a;
if (null != dbi)
{
Console.WriteLine("Bug no: {0}, for Method: {1}", dbi.BugNo, m.Name);
Console.WriteLine("Developer: {0}", dbi.Developer);
Console.WriteLine("Last Reviewed: {0}", dbi.LastReview);
Console.WriteLine("Remarks: {0}", dbi.Message);

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 158

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

}
}
}

Console.ReadLine();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Length: 4.5
Width: 7.5
Area: 33.75
Bug No: 49
Developer: Nuha Ali
Last Reviewed: 10/10/2012
Remarks: Unused variable
Bug No: 45
Developer: Zara Ali
Last Reviewed: 12/8/2012
Remarks: Return type mismatch
Bug No: 55, for Method: GetArea
Developer: Zara Ali
Last Reviewed: 19/10/2012
Remarks: Return type mismatch
Bug No: 56, for Method: Display
Developer: Zara Ali
Last Reviewed: 19/10/2012
Remarks:

Thuc tnh (Property) trong C#


Thuc tnh - Property l cc thnh vin c t tn ca cc lp, cu trc, v Interface. Cc bin
thnh vin hoc cc phng thc trong mt lp hoc cu trc c gi l cc Field. Thuc tnh l
mt s k tha ca cc Field v c truy cp bi s dng cng c php. Chng s
dng accessor thng qua cc gi tr ca cc Private Field c th c c, c vit v c
thao tc.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 159

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Thuc tnh (Property) khng t tn cc v tr lu gi. Thay vo , chng c accessors m c,


ghi hoc tnh ton cc gi tr ca chng.
V d, chng ta c mt lp vi tn Student, vi cc Private Field cho age, name, v code. Chng ta
khng th trc tip truy cp cc Field ny t bn ngoi phm vi lp , nhng chng ta c th c
cc thuc tnh truy cp cc Private Field ny.

Accessor trong C#
Trong C#, accessor l mt thuc tnh cha cc lnh c th thc thi, m gip trong vicly (c
hoc tnh ton) hoc thit lp (ghi) thuc tnh. Cc khai bo accessor c th thu c mt get
accessor, mt set accessor, hoc c hai. V d:
// Declare a Code property of type string:
public string Code
{
get
{
return code;
}
set
{
code = value;
}
}

// Declare a Name property of type string:


public string Name
{
get
{
return name;
}
set
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 160

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

name = value;
}
}

// Declare a Age property of type int:


public int Age
{
get
{
return age;
}
set
{
age = value;
}
}

V d
V d di y minh ha cch s dng ca cc thuc tnh trong C#:
using System;
namespace tutorialspoint
{
class Student
{
private string code = "N.A";
private string name = "not known";
private int age = 0;

// Declare a Code property of type string:


public string Code
{
get
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 161

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

return code;
}
set
{
code = value;
}
}

// Declare a Name property of type string:


public string Name
{
get
{
return name;
}
set
{
name = value;
}
}

// Declare a Age property of type int:


public int Age
{
get
{
return age;
}
set
{
age = value;
}
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 162

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

public override string ToString()


{
return "Code = " + Code +", Name = " + Name + ", Age = " + Age;
}
}

class ExampleDemo
{
public static void Main()
{

// Create a new Student object:


Student s = new Student();

// Setting code, name and the age of the student


s.Code = "001";
s.Name = "Zara";
s.Age = 9;
Console.WriteLine("Student Info: {0}", s);

//let us increase age


s.Age += 1;
Console.WriteLine("Student Info: {0}", s);
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Student Info: Code = 001, Name = Zara, Age = 9
Student Info: Code = 001, Name = Zara, Age = 10

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 163

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Thuc tnh tru tng trong C#


Mt lp Abstract c th c mt thuc tnh abstract, m nn c trin khai trong lp k tha.
Chng trnh sau minh ha iu ny:
using System;
namespace tutorialspoint
{
public abstract class Person
{
public abstract string Name
{
get;
set;
}
public abstract int Age
{
get;
set;
}
}

class Student : Person


{

private string code = "N.A";


private string name = "N.A";
private int age = 0;

// Declare a Code property of type string:


public string Code
{
get
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 164

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

return code;
}
set
{
code = value;
}
}

// Declare a Name property of type string:


public override string Name
{
get
{
return name;
}
set
{
name = value;
}
}

// Declare a Age property of type int:


public override int Age
{
get
{
return age;
}
set
{
age = value;
}
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 165

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

public override string ToString()


{
return "Code = " + Code +", Name = " + Name + ", Age = " + Age;
}
}

class ExampleDemo
{
public static void Main()
{
// Create a new Student object:
Student s = new Student();

// Setting code, name and the age of the student


s.Code = "001";
s.Name = "Zara";
s.Age = 9;
Console.WriteLine("Student Info:- {0}", s);

//let us increase age


s.Age += 1;
Console.WriteLine("Student Info:- {0}", s);
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Student Info: Code = 001, Name = Zara, Age = 9
Student Info: Code = 001, Name = Zara, Age = 10

Indexer trong C#
http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 166

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Mt indexer trong C# cho php mt i tng c lp ch mc, v d nh mt mng. Khi bn


nh ngha mt indexer cho mt lp, th lp ny vn hnh tng t nh mt virtual array. Sau ,
bn c th truy cp instance (s th hin) ca lp ny bi s dng ton t truy cp mng trong C#
l ([ ]).

C php
Mt Indexer mt chiu c c php nh sau trong C#:
element-type this[int index]
{
// The get accessor.
get
{
// return the value specified by index
}

// The set accessor.


set
{
// set the value specified by index
}
}

S s dng ca Indexer trong C#


Vic khai bo hnh vi ca mt Indexer l tng t nh mt thuc tnh. Bn s dng getaccessor
v set accessor nh ngha mt Indexer. Tuy nhin, cc thuc tnh tr v hoc thit lp mt
thnh vin d liu c th, trong khi , Indexer tr v hoc thit lp mt gi tr c th t instance
ca i tng. Ni cch khc, n chia d liu ca instance thnh cc phn nh hn v nh ch
mc mi phn, ly hoc thit lp mi phn.
Vic nh ngha mt thuc tnh bao gm vic cung cp mt tn thuc tnh. Indexer khng c nh
ngha vi cc tn, nhng vi t kha this trong C#, m tham chiu ti instance ca i tng. V
d sau y minh ha khi nim ny:
using System;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 167

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

namespace IndexerApplication
{
class IndexedNames
{
private string[] namelist = new string[size];
static public int size = 10;
public IndexedNames()
{
for (int i = 0; i < size; i++)
namelist[i] = "N. A.";
}

public string this[int index]


{
get
{
string tmp;

if( index >= 0 && index <= size-1 )


{
tmp = namelist[index];
}
else
{
tmp = "";
}

return ( tmp );
}
set
{
if( index >= 0 && index <= size-1 )
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 168

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

namelist[index] = value;
}
}
}

static void Main(string[] args)


{
IndexedNames names = new IndexedNames();
names[0] = "Zara";
names[1] = "Riz";
names[2] = "Nuha";
names[3] = "Asif";
names[4] = "Davinder";
names[5] = "Sunil";
names[6] = "Rubic";
for ( int i = 0; i < IndexedNames.size; i++ )
{
Console.WriteLine(names[i]);
}

Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Zara
Riz
Nuha
Asif
Davinder
Sunil
Rubic
N. A.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 169

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

N. A.
N. A.

Np chng Indexer trong C#


Indexer trong C# c th c np chng. Indexer cng c th c khai bo vi nhiu tham s v
mi tham s c th l mt kiu khc nhau. N khng cn thit cc Indexer phi l integer. C#
cho php cc ch mc c th l cc kiu gi tr khc, v d, mt kiu string.
V d sau minh ha cch np chng Indexer trong C#:
using System;
namespace IndexerApplication
{
class IndexedNames
{
private string[] namelist = new string[size];
static public int size = 10;
public IndexedNames()
{
for (int i = 0; i < size; i++)
{
namelist[i] = "N. A.";
}
}

public string this[int index]


{
get
{
string tmp;

if( index >= 0 && index <= size-1 )


{
tmp = namelist[index];

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 170

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

}
else
{
tmp = "";
}

return ( tmp );
}
set
{
if( index >= 0 && index <= size-1 )
{
namelist[index] = value;
}
}
}
public int this[string name]
{
get
{
int index = 0;
while(index < size)
{
if (namelist[index] == name)
{
return index;
}
index++;
}
return index;
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 171

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

static void Main(string[] args)


{
IndexedNames names = new IndexedNames();
names[0] = "Zara";
names[1] = "Riz";
names[2] = "Nuha";
names[3] = "Asif";
names[4] = "Davinder";
names[5] = "Sunil";
names[6] = "Rubic";

//using the first indexer with int parameter


for (int i = 0; i < IndexedNames.size; i++)
{
Console.WriteLine(names[i]);
}

//using the second indexer with the string parameter


Console.WriteLine(names["Nuha"]);
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Zara
Riz
Nuha
Asif
Davinder
Sunil
Rubic
N. A.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 172

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

N. A.
N. A.
2

Delegate trong C#
Delegate trong C# l tng t nh con tr ti cc hm, trong C hoc trong C++. MtDelegate l
mt bin kiu tham chiu m gi tham chiu ti mt phng thc. Tham chiu c th c
thay i ti runtime.
c bit, cc delegate c s dng trin khai cc s kin v cc phng thc call-back. Tt
c delegate c k tha mt cch ngm nh t lp System.Delegate trong C#.

Khai bo Delegate trong C#


Khai bo Delegate trong C# quyt nh cc phng thc m c th c tham chiu bi Delegate
. Mt Delegate c th tham chiu ti mt phng thc, m c cng du hiu nh ca Delegate
.
V d, bn xt mt delegate sau y:
public delegate int MyDelegate (string s);

Delegate trn c th c s dng tham chiu bt k phng thc m c mt tham


sstring n v tr v mt bin kiu int.
C php khai bo delegate trong C# l:
delegate <return type> <delegate-name> <parameter list>

Khi to Delegate trong C#


Khi mt kiu delegate c khai bo, mt i tng delegate phi c to vi t khanew v
c lin kt vi mt phng thc c th. Khi to mt delegate, tham s c truyn ti biu thc
new c vit tng t nh mt li gi phng thc, nhng khng c tham s ti phng thc
. V d:
public delegate void printString(string s);
...
printString ps1 = new printString(WriteToScreen);

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 173

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

printString ps2 = new printString(WriteToFile);

V d sau minh ha cch khai bo, thuyt minh v s dng mt delegate m c th c s dng
tham chiu cc phng thc m nhn mt tham s integer v tr v mt gi tr integer.
using System;

delegate int NumberChanger(int n);


namespace DelegateAppl
{
class TestDelegate
{
static int num = 10;
public static int AddNum(int p)
{
num += p;
return num;
}

public static int MultNum(int q)


{
num *= q;
return num;
}
public static int getNum()
{
return num;
}

static void Main(string[] args)


{
//create delegate instances
NumberChanger nc1 = new NumberChanger(AddNum);
NumberChanger nc2 = new NumberChanger(MultNum);

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 174

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

//calling the methods using the delegate objects


nc1(25);
Console.WriteLine("Value of Num: {0}", getNum());
nc2(5);
Console.WriteLine("Value of Num: {0}", getNum());
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Value of Num: 35
Value of Num: 175

Multicast mt Delegate trong C#


Cc i tng Delegate c th c hp thnh bi s dng ton t +. Mt delegate c hp
thnh gi hai Delegate m n c hp thnh t . Ch c cc delegate cng kiu c th c
hp thnh. Ton t - c th c s dng g b mt delegate thnh phn t mt delegate
c hp thnh.
S dng thuc tnh ny ca cc delegate, bn c th to mt danh sch triu hi ca cc phng
thc m s c gi khi delegate c triu hi. iu ny c gi lMulticasting ca mt
Delegate. Chng trnh v d sau minh ha Multicasting ca mt Delegate trong C#:
using System;

delegate int NumberChanger(int n);


namespace DelegateAppl
{
class TestDelegate
{
static int num = 10;
public static int AddNum(int p)
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 175

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

num += p;
return num;
}

public static int MultNum(int q)


{
num *= q;
return num;
}

public static int getNum()


{
return num;
}

static void Main(string[] args)


{
//create delegate instances
NumberChanger nc;
NumberChanger nc1 = new NumberChanger(AddNum);
NumberChanger nc2 = new NumberChanger(MultNum);
nc = nc1;
nc += nc2;

//calling multicast
nc(5);
Console.WriteLine("Value of Num: {0}", getNum());
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 176

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Value of Num: 75

Cch s dng Delegate trong C#


V d sau minh ha cch s dng ca delegate trong C#. Delegate vi tn printString c th c
s dng tham chiu phng thc m nhn mt chui nh l input v khng tr v ci g.
Chng ta s dng delegate ny gi hai phng thc: phng thc u tin in chui ti
Console, v phng thc th hai in n ti mt File.
using System;
using System.IO;

namespace DelegateAppl
{
class PrintString
{
static FileStream fs;
static StreamWriter sw;

// delegate declaration
public delegate void printString(string s);

// this method prints to the console


public static void WriteToScreen(string str)
{
Console.WriteLine("The String is: {0}", str);
}

//this method prints to a file


public static void WriteToFile(string s)
{
fs = new FileStream("c:\\message.txt",
FileMode.Append, FileAccess.Write);
sw = new StreamWriter(fs);

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 177

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

sw.WriteLine(s);
sw.Flush();
sw.Close();
fs.Close();
}

// this method takes the delegate as parameter and uses it to


// call the methods as required
public static void sendString(printString ps)
{
ps("Hello World");
}
static void Main(string[] args)
{
printString ps1 = new printString(WriteToScreen);
printString ps2 = new printString(WriteToFile);
sendString(ps1);
sendString(ps2);
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


The String is: Hello World

S kin (Event) trong C#


S kin (Event) l cc hnh ng ca ngi dng, v d nh nhn phm, click, di chuyn chut,
Cc Application cn phn hi cc s kin ny khi chng xut hin. V d, cc ngt (interrupt). Cc
s kin (Event) c s dng giao tip bn trong tin trnh.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 178

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

S dng Delegate vi Event trong C#


Cc Event c khai bo v c to trong mt lp v c lin kt vi Event Handler bi s
dng cc Delegate bn trong cng lp hoc mt s lp khc. Lp m cha Event c s
dng cng b event . iu ny c gi l lp Publisher. Mt s lp khc m chp nhn
Event ny c gi l lp Subscriber. Cc Event trong C# s dng m hnh PublisherSubscriber.
Mt Publisher trong C# l mt i tng m cha nh ngha ca event v delegate . Mi lin
h event-delegate cng c nh ngha trong i tng ny. Mt i tng lp Publisher triu hi
Event v n c thng bo ti cc i tng khc.
Mt Subscriber trong C# l mt i tng m chp nhn event v cung cp mt Event Handler.
Delegate trong lp Publisher triu hi phng thc (Event Handler) ca lp Subscriber.

Khai bo Event trong C#


khai bo mt Event bn trong mt lp, u tin mt kiu delegate cho Event phi c khai
bo. V d:
public delegate void BoilerLogHandler(string status);

Tip theo, chnh Event c khai bo, bi s dng t kha event trong C#:
//Defining event based on the above delegate
public event BoilerLogHandler BoilerEventLog;

Code trn nh ngha mt delegate vi tn l BoilerLogHandler v mt Event vi tn


lBoilerEventLog, m triu hi delegate khi n c to ra.

V d 1
using System;
namespace SimpleEvent
{
using System;

public class EventTest


{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 179

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

private int value;


public delegate void NumManipulationHandler();
public event NumManipulationHandler ChangeNum;
protected virtual void OnNumChanged()
{
if (ChangeNum != null)
{
ChangeNum();
}
else
{
Console.WriteLine("Event fired!");
}
}

public EventTest(int n )
{
SetValue(n);
}

public void SetValue(int n)


{
if (value != n)
{
value = n;
OnNumChanged();
}
}
}

public class MainClass


{
public static void Main()

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 180

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

{
EventTest e = new EventTest(5);
e.SetValue(7);
e.SetValue(11);
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Event Fired!
Event Fired!
Event Fired!

V d 2
V d ny cung cp mt application n gin x l s c cho mt h thng ni hn un nc
nng. Khi k s bo dng kim tra ni hi, nhit v p sut ni hi c t ng ghi li vo
trong mt log file cng vi cc ghi ch ca k s bo dng ny.
using System;
using System.IO;

namespace BoilerEventAppl
{
// boiler class
class Boiler
{
private int temp;
private int pressure;
public Boiler(int t, int p)
{
temp = t;
pressure = p;
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 181

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

public int getTemp()


{
return temp;
}

public int getPressure()


{
return pressure;
}
}

// event publisher
class DelegateBoilerEvent
{
public delegate void BoilerLogHandler(string status);

//Defining event based on the above delegate


public event BoilerLogHandler BoilerEventLog;

public void LogProcess()


{
string remarks = "O. K";
Boiler b = new Boiler(100, 12);
int t = b.getTemp();
int p = b.getPressure();
if(t > 150 || t < 80 || p < 12 || p > 15)
{
remarks = "Need Maintenance";
}
OnBoilerEventLog("Logging Info:\n");
OnBoilerEventLog("Temparature " + t + "\nPressure: " + p);
OnBoilerEventLog("\nMessage: " + remarks);

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 182

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

protected void OnBoilerEventLog(string message)


{
if (BoilerEventLog != null)
{
BoilerEventLog(message);
}
}
}

// this class keeps a provision for writing into the log file
class BoilerInfoLogger
{
FileStream fs;
StreamWriter sw;
public BoilerInfoLogger(string filename)
{
fs = new FileStream(filename, FileMode.Append, FileAccess.Write);
sw = new StreamWriter(fs);
}

public void Logger(string info)


{
sw.WriteLine(info);
}

public void Close()


{
sw.Close();
fs.Close();
}
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 183

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

// The event subscriber


public class RecordBoilerInfo
{
static void Logger(string info)
{
Console.WriteLine(info);
}//end of Logger

static void Main(string[] args)


{
BoilerInfoLogger filelog = new BoilerInfoLogger("e:\\boiler.txt");
DelegateBoilerEvent boilerEvent = new DelegateBoilerEvent();
boilerEvent.BoilerEventLog += new
DelegateBoilerEvent.BoilerLogHandler(Logger);
boilerEvent.BoilerEventLog += new
DelegateBoilerEvent.BoilerLogHandler(filelog.Logger);
boilerEvent.LogProcess();
Console.ReadLine();
filelog.Close();
}//end of main

}//end of RecordBoilerInfo
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Logging info:

Temperature 100
Pressure 12

Message: O. K

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 184

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Collection trong C#
Cc lp Collection l cc lp c bit lu gi v thu hi d liu. Nhng lp ny cung cp s h
tr cho Stack, Queue, List, v Hash Table. a s cc lp Collection trong C# trin khai cng cc
Interface.
Trong C#, cc lp Collection phc v cc mc ch a dng, chng hn nh cp pht b nh ng
cho cc phn t v truy cp mt danh sch cc item da trn mt ch mc, Nhng lp ny to
tp hp cc i tng ca lp Object, m l lp c s cho tt c kiu d liu trong C#.
Ghi ch: Stack: ngn xp, push: thm nt mi vo nh stack, pop: thao tc ly 1 phn t t nh
stack.

Cc lp Collection v cch s dng ca chng trong


C#
Bng di lit k cc lp c s dng ph bin ca System.Collection namespace. Bn truy
cp link tm hiu chi tit.
Lp

Miu t v Cch s dng

ArrayList trong C#

N biu din mt tp hp c sp xp ca mt i tng m c


th c lp ch mc cho tng item ring r.
V c bn, n l mt s thay th cho mt mng. Tuy nhin, khng
ging nh trong mng, bn c th thm v g b cc item t mt list
ti mt v tr xc nh bi s dng mt ch mc v mng chnh n
c th t iu chnh kch c mt cch t ng. N cng cho php
cp pht b nh ng, thm, tm kim v sp xp cc item trong mt
list.

Hashtable trong C#

N s dng mt cp key-value truy cp cc phn t trong


collection ny.
Mt Hash Table c s dng khi bn cn truy cp cc phn t bi
s dng key, v bn c th nhn din mt gi tr key hu ch. Mi

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 185

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

item trong Hash Table c mt cp key/value. Key c s dng


truy cp cc item trong dng collection ny.

SortedList trong C#

N s dng mt key cng nh mt index truy cp cc item trong


mt list.
Mt danh sch c sp xp l s t hp ca mt mng v mt
Hash Table. N cha mt danh sch cc item m c th c truy
cp bi s dng mt key hoc mt ch mc. Nu bn truy cp item
bi s dng mt ch mc, n l mt ArrayList, v nu bn truy cp
item bi s dng key, n l mt HashTable. Tp hp cc item lun
lun c sp xp bi gi tr key

Stack trong C#

N biu din mt tp hp Last-in, First-out ca cc i tng.


N c s dng khi bn cn truy cp cc item theo dng Last-in,
First-out. Khi bn thm mt item vo trong danh sch, n c gi
lpushing v khi bn g b mt item, n c gi l popping.

Queue trong C#

N biu din mt tp hp First-in, First-out ca cc i tng.


N c s dng khi bn cn truy cp cc item theo dng First-in,
First-out. Khi bn thm mt item vo trong danh sch, n c gi
lenqueue v khi bn g b mt item, n c gi l deque.

BitArray trong C#

N biu din mt mng dng biu din nh phn bi s dng cc


gi tr 1 v 0.
N c s dng khi bn cn lu gi cc Bit nhng khng bit
trc s lng Bit. Bn c th truy cp cc item t BitArray
collection bi s dng mt ch mc l s nguyn, m bt u t 0.

Generic trong C#
http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 186

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Generic trong C# cho php bn tr hon cc c im k thut (Specification) ca kiu d liu ca


vic lp trnh cc phn t trong mt lp hoc mt phng thc, ti khi n thc s c s dng
trong chng trnh. Ni cch khc, Generic cho php bn vit mt lp hoc phng thc m c
th lm vic vi bt k kiu d liu no.
Hiu nm na, n gin generic cng l mt kiu d liu trong C#, n cng nh l int, float, string,
bool, ..., nhng im khc bit y, generic n l mt kiu d liu "t do", ngha l n c th l
kiu d liu no cng c, ty vo mc ch s dng, n nh l 1 kiu i din cho tt c cc
kiu d liu cn li.
Bn vit cc specification cho lp v phng thc, vi cc tham s c th thay th cho cc kiu d
liu. Khi Compiler bt gp mt constructor cho mt lp hoc mt li gi hm cho phng thc, n
to code x l kiu d liu c th . Di y l v d n gin s gip bn hiu khi nim
ny.
using System;
using System.Collections.Generic;

namespace GenericApplication
{
public class MyGenericArray<T>
{
private T[] array;
public MyGenericArray(int size)
{
array = new T[size + 1];
}

public T getItem(int index)


{
return array[index];
}

public void setItem(int index, T value)


{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 187

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

array[index] = value;
}
}

class Tester
{
static void Main(string[] args)
{

//declaring an int array


MyGenericArray<int> intArray = new MyGenericArray<int>(5);

//setting values
for (int c = 0; c < 5; c++)
{
intArray.setItem(c, c*5);
}

//retrieving the values


for (int c = 0; c < 5; c++)
{
Console.Write(intArray.getItem(c) + " ");
}

Console.WriteLine();

//declaring a character array


MyGenericArray<char> charArray = new MyGenericArray<char>(5);

//setting values
for (int c = 0; c < 5; c++)
{
charArray.setItem(c, (char)(c+97));

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 188

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

//retrieving the values


for (int c = 0; c< 5; c++)
{
Console.Write(charArray.getItem(c) + " ");
}
Console.WriteLine();

Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


0 5 10 15 20
a b c d e

c im ca Generic trong C#
Generic l mt k thut lm cho chng trnh C# ca bn phong ph hn theo cc cch sau:

N gip bn ti a ha vic ti s dng ca code, an ton kiu, v hiu nng.

Bn c th to cc lp generic collection. Th vin lp ca .Net Framework cha mt s


lp generic collection trong System.Collections.Generic namespace. Bn c th s dng
cc

lp

generic

collection

ny

thay

cho

cc

lp

collection

trongSystem.Collections namespace.

Bn c th to cho ring mnh cc Class, Interface, phng thc, Event v Delegate dng
generic.

Bn c th to cc lp generic m cho bn kh nng truy cp ti cc phng thc trn cc


kiu d liu c th.

Bn c th ly thng tin v cc kiu c s dng trong mt kiu d liu generic ti runtime


bi cc phng thc ca Reflection.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 189

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Cc phng thc Generic trong C#


Trong v d trc, chng ta s dng mt lp generic, tng t, chng ta c th khai bo mt
phng thc generic vi mt tham s kiu. V d sau minh ha iu ny:
using System;
using System.Collections.Generic;

namespace GenericMethodAppl
{
class Program
{
static void Swap<T>(ref T lhs, ref T rhs)
{
T temp;
temp = lhs;
lhs = rhs;
rhs = temp;
}
static void Main(string[] args)
{
int a, b;
char c, d;
a = 10;
b = 20;
c = 'I';
d = 'V';

//display values before swap:


Console.WriteLine("Int values before calling swap:");
Console.WriteLine("a = {0}, b = {1}", a, b);
Console.WriteLine("Char values before calling swap:");
Console.WriteLine("c = {0}, d = {1}", c, d);

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 190

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

//call swap
Swap<int>(ref a, ref b);
Swap<char>(ref c, ref d);

//display values after swap:


Console.WriteLine("Int values after calling swap:");
Console.WriteLine("a = {0}, b = {1}", a, b);
Console.WriteLine("Char values after calling swap:");
Console.WriteLine("c = {0}, d = {1}", c, d);

Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Int values before calling swap:
a = 10, b = 20
Char values before calling swap:
c = I, d = V
Int values after calling swap:
a = 20, b = 10
Char values after calling swap:
c = V, d = I

Generic Delegate trong C#


Trong C#, bn c th nh ngha mt Generic Delegate vi cc tham s kiu. V d:
delegate T NumberChanger<T>(T n);

V d sau y minh ha cch s dng ca generic delegate trong C#:


using System;
using System.Collections.Generic;

delegate T NumberChanger<T>(T n);

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 191

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

namespace GenericDelegateAppl
{
class TestDelegate
{
static int num = 10;
public static int AddNum(int p)
{
num += p;
return num;
}

public static int MultNum(int q)


{
num *= q;
return num;
}
public static int getNum()
{
return num;
}

static void Main(string[] args)


{
//create delegate instances
NumberChanger<int> nc1 = new NumberChanger<int>(AddNum);
NumberChanger<int> nc2 = new NumberChanger<int>(MultNum);

//calling the methods using the delegate objects


nc1(25);
Console.WriteLine("Value of Num: {0}", getNum());
nc2(5);
Console.WriteLine("Value of Num: {0}", getNum());
Console.ReadKey();

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 192

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Value of Num: 35
Value of Num: 175

Phng thc nc danh trong C#


Chng ta bn lun rng Delegate c s dng tham chiu bt k phng thc no m c
cng du hiu nh trong Delegate . Ni cch khc, bn c th gi mt phng thc m c th
c tham chiu bi mt Delegate bi s dng i tng Delegate .
Phng thc nc danh (Anonymous Method) trong C# cung cp mt k thut truyn mt
khi code nh l mt tham s delegate. Cc phng thc nc danh l cc phng thc khng c
tn, ch c thn phng thc.
Bn khng cn xc nh kiu tr v trong mt phng thc nc danh; n c suy ra t lnh
return bn trong thn phng thc nc danh .

Vit mt Phng thc nc danh trong C#


Cc phng thc nc danh (Anonymous Method) trong C# c khai bo vi vic to instance
ca Delegate , vi mt t kha delegate. V d:
delegate void NumberChanger(int n);
...
NumberChanger nc = delegate(int x)
{
Console.WriteLine("Anonymous Method: {0}", x);
};

Khi Console.WriteLine("Anonymous Method: {0}", x); l phn thn ca phng thc nc danh.
Delegate c th c gi c vi cc phng thc nc danh cng nh cc phng thc c t
tn theo cng cch, v d: bng vic truyn cc tham s phng thc ti i tng Delegate .

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 193

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

V d:
nc(10);

V d
Di y l v d minh ha khi nim trn:
using System;

delegate void NumberChanger(int n);


namespace DelegateAppl
{
class TestDelegate
{
static int num = 10;
public static void AddNum(int p)
{
num += p;
Console.WriteLine("Named Method: {0}", num);
}

public static void MultNum(int q)


{
num *= q;
Console.WriteLine("Named Method: {0}", num);
}

public static int getNum()


{
return num;
}
static void Main(string[] args)
{
//create delegate instances using anonymous method

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 194

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

NumberChanger nc = delegate(int x)
{
Console.WriteLine("Anonymous Method: {0}", x);
};

//calling the delegate using the anonymous method


nc(10);

//instantiating the delegate using the named methods


nc =

new NumberChanger(AddNum);

//calling the delegate using the named methods


nc(5);

//instantiating the delegate using another named methods


nc =

new NumberChanger(MultNum);

//calling the delegate using the named methods


nc(2);
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Anonymous Method: 10
Named Method: 15
Named Method: 30

Unsafe code trong C#


C# cho php s dng cc bin con tr trong mt hm ca khi code khi n c nh du
bi unsafe modifier. Khi nim unsafe code hoc unmanaged code trong C# l mt khi code m
s dng mt bin con tr.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 195

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Ghi ch: thc thi cc chng trnh c cp trong chng ny ti,codingground, bn nn


thit lp ty chn bin dch trong Project >> Compile Options >> Compilation Command thnh
mcs *.cs -out:main.exe -unsafe"

Con tr (Pointer) trong C#


Mt con tr l mt bin m c gi tr l a ch ca bin khc, v d: a ch trc tip ca v tr b
nh. Tng t nh bt k bin hoc hng khc trong C#, bn phi khai bo mt con tr trc khi
bn c th s dng n lu gi bt k a ch bin no.
Form chung ca mt khai bo con tr trong C# l:
type *var-name;

Di y l cc khai bo con tr hp l trong C#:


int

*ip;

/* pointer to an integer */

double *dp;

/* pointer to a double */

float

*fp;

/* pointer to a float */

char

*ch

/* pointer to a character */

V d sau minh ha s s dng ca con tr, s dng unsafe modifier trong C#:
using System;
namespace UnsafeCodeApplication
{
class Program
{
static unsafe void Main(string[] args)
{
int var = 20;
int* p = &var;
Console.WriteLine("Data is: {0} ",

var);

Console.WriteLine("Address is: {0}",

(int)p);

Console.ReadKey();
}
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 196

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Khi code trn c bin dch v thc thi, n s cho kt qu:


Data is: 20
Address is: 99215364

Thay cho vic khai bo ton b phng thc dng unsafe, bn cng c th khai bo mt phn
code dng unsafe.

Thu hi gi tr d liu bi s dng con tr trong C#


Bn c th thu hi d liu c lu gi ti v tr c tham chiu bi bin con tr, s dng
phng thc ToString() trong C#. y l v d minh ha:
using System;
namespace UnsafeCodeApplication
{
class Program
{
public static void Main()
{
unsafe
{
int var = 20;
int* p = &var;
Console.WriteLine("Data is: {0} " , var);
Console.WriteLine("Data is: {0} " , p->ToString());
Console.WriteLine("Address is: {0} " , (int)p);
}

Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 197

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Data is: 20
Data is: 20
Address is: 77128984

Truyn Con tr nh l cc Tham s ti phng thc


trong C#
Bn c th truyn mt bin con tr ti mt phng thc di dng cc tham s. y l v d minh
ha:
using System;
namespace UnsafeCodeApplication
{
class TestPointer
{
public unsafe void swap(int* p, int *q)
{
int temp = *p;
*p = *q;
*q = temp;
}

public unsafe static void Main()


{
TestPointer p = new TestPointer();
int var1 = 10;
int var2 = 20;
int* x = &var1;
int* y = &var2;

Console.WriteLine("Before Swap: var1:{0}, var2: {1}", var1, var2);


p.swap(x, y);

Console.WriteLine("After Swap: var1:{0}, var2: {1}", var1, var2);


Console.ReadKey();

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 198

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Before Swap: var1: 10, var2: 20
After Swap: var1: 20, var2: 10

Truy cp cc phn t mng bi s dng mt con tr


trong C#
Trong C#, mt tn mng v mt con tr ti cng kiu d liu dng d liu mng, l khng cng
kiu bin. V d, int *p v int[] p, l khng cng kiu. Bn c th lng gia bin con tr p bi v n
khng l c nh trong b nh, nhng mt a ch mng l c nh trong b nh, v bn khng th
lng gia n.
V th, nu bn cn truy cp mt d liu mng bi s dng mt bin con tr, nh khi chng ta
lm trong C hoc C++ (bn c th kim tra: Con tr trong C), bn cn c nh con tr bi s
dng t kha fixed trong C#.
Sau y l v d minh ha:
using System;
namespace UnsafeCodeApplication
{
class TestPointer
{
public unsafe static void Main()
{
int[]

list = {10, 100, 200};

fixed(int *ptr = list)

/* let us have array address in pointer */


for ( int i = 0; i < 3; i++)
{
Console.WriteLine("Address of list[{0}]={1}",i,(int)(ptr + i));

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 199

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Console.WriteLine("Value of list[{0}]={1}", i, *(ptr + i));


}

Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


Address of list[0] = 31627168
Value of list[0] = 10
Address of list[1] = 31627172
Value of list[1] = 100
Address of list[2] = 31627176
Value of list[2] = 200

Bin dch Unsafe Code trong C#


bin dch Unsafe Code, bn phi xc nh /unsafe command-line.
V d, bin dch chng trnh c tn prog1.cs cha unsafe code, t command-line, bn cung
cp lnh sau trong C#:
csc /unsafe prog1.cs

Nu bn ang s dng Visual Studio IDE, bn cn kch hot s s dng ca unsafe code trong
project properties.
lm iu ny:

M project properties bng vic nhn p chut vo properties node trong Solution
Explorer.

Nhn vo Build tab.

Chn ty chn "Allow unsafe code".

Nh trong nh nh sau:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 200

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

a lung (Multithread) trong C#


Mt thread c nh ngha nh l mt ng truyn thc thi (execution path) ca mt chng
trnh. Mi Thread nh ngha mt dng iu khin duy nht. Nu application ca bn gm cc hot
ng phc tp v tn thi gian, th n thng l rt hu ch khi thit lp cc execution path hoc
Thread, vi mi Thread thc hin mt cng vic c th.
Cc Thread l cc tin trnh nh. Mt v d ph bin ca s s dng Thread l s trin khai lp
trnh tng tranh (concurrent programming) bi cc h iu hnh hin i. S dng cc Thread
tip kim s hao ph ca CPU cycle v tng hiu qu ca mt application.
Ti chng ny, chng ta vit cc chng trnh m mt Thread n chy nh l mt tin trnh
n, l trnh chy th hin ca application. Tuy nhin, theo cch ny, application c th thc
hin mt cng vic ti mt thi im. lm n thc thi nhiu hn mt tc v ti mt thi im, n
c th c phn chia thnh cc Thread nh hn.

Vng i ca Thread trong C#


Vng i ca mt Thread bt u khi mt i tng ca lp System.Threading.Thread c to
v kt thc khi Thread c kt thc hoc hon thnh vic thc thi.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 201

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Di y l cc trng thi a dng trong vng i ca mt Thread trong C#:

Unstarted State: N l tnh hung khi instance ca Thread c to, nhng phng thc
Start cha c gi.

Ready State: N l tnh hung khi Thread sn sng chy v i CPU cycle.

Not Runnable State: Mt Thread l khng th thc thi (not executable), khi:

Phng thc Sleep c gi.

Phng thc Wait c gi.

B ngn chn bi hot ng I/O.

Dead State: N l tnh hung khi Thread hon thnh s thc thi hoc b hy b.

Main Thread trong C#


Trong C#, lp System.Threading.Thread c s dng lm vic vi cc Thread. N cho php
to v truy cp cc Thread ring bit trong mt Multithreaded Application. Thread u tin c
thc thi trong mt tin trnh c gi l Main Thread trong C#.
Khi mt chng trnh C# bt u thc thi, Main Thread c t ng to ra. Cc Thread, c to
bi s dng lp Thread, c gi cc Thread con ca Main Thread. Bn c th truy cp mt
Thread bi s dng thuc tnh CurrentThread ca lp Thread.
Di y l chng trnh v d minh ha cho s thc thi Main Thread trong C#:
using System;
using System.Threading;

namespace MultithreadingApplication
{
class MainThreadProgram
{
static void Main(string[] args)
{
Thread th = Thread.CurrentThread;
th.Name = "MainThread";

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 202

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Console.WriteLine("This is {0}", th.Name);


Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


This is MainThread

Thuc tnh v Phng thc ca lp Thread trong C#


Bng di lit k mt s thuc tnh c s dng ph bin nht ca lp Thread trong C#:
Thuc tnh

Miu t

CurrentContext

Ly ng cnh (context) hin ti m trong Thread ang thc thi

CurrentCulture

Ly hoc thit lp culture gm language, date, time, currency, cho


Thread hin ti

CurrentPrinciple

Ly hoc thit lp nguyn l hin ti ca Thread

CurrentThread

Ly Thread ang chy hin ti

CurrentUICulture

Ly hoc thit lp culture hin ti c s dng bi Resource


Manager tm kim cho Resource c th ti runtime

ExecutionContext

Ly mt i tng ExecutionContext m cha thng tin v cc


context a dng ca Thread hin ti

IsAlive

Ly mt gi tr ch trng thi thc thi ca Thread hin ti

IsBackground

Ly hoc thit lp mt gi tr ch rng c hay khng mt Thread l

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 203

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Background Thread

IsThreadPoolThread

Ly mt gi tr ch rng c hay khng mt Thread l ca Managed


Thread Pool

ManagedThreadId

Ly mt nh danh duy nht cho Managed Thread hin ti

Name

Ly hoc thit lp tn ca Thread

Priority

Ly hoc thit lp mt gi tr ch quyn u tin ca mt Thread

ThreadState

Ly mt gi tr cha cc trng thi ca Thread hin ti

Bng ny lit k cc phng thc c s dng ph bin nht ca lp Thread trong C#:
STT

Phng thc

public void Abort()


To mt ThreadAbortException trong Thread m trn n c triu hi, bt u
tin trnh kt thc Thread . Gi phng thc ny thng kt thc Thread

public static LocalDataStoreSlot AllocateDataSlot()


Cp pht mt Unnamed Data Slot cho tt c Thread. tng hiu sut, s dng cc
Field m c nh du vi attribute l ThreadStaticAttribute thay th

public static LocalDataStoreSlot AllocateNamedDataSlot(string name)


Cp pht mt Named Data Slot cho tt c Thread. tng hiu sut, s dng cc
Field m c nh du vi attribute l ThreadStaticAttribute thay th

public static void BeginCriticalRegion()


Thng bo cho mt host rng s thc thi l chun b i vo mt khu vc code, m

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 204

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

trong cc nh hng ca vic hy b mt Thread hoc cc Exception khng c


x l c th gy nguy hi ti cc tc v khc trong min ng dng

public static void BeginThreadAffinity()


Thng bo cho mt Host rng Managed code l chun b thc thi cc ch lnh m ph
thuc vo tnh ng nht ca Physical operating system thread hin ti

public static void EndCriticalRegion()


Thng bo cho mt host rng s thc thi l chun b i vo mt khu vc code, m
trong cc nh hng ca hy b mt Thread hoc cc Exception khng c x l
b hn ch ti tc v hin ti

public static void EndThreadAffinity()


Thng bo cho mt Host rng Managed code kt thc vic thc thi cc ch lnh m
ph thuc vo tnh ng nht ca Physical Operating System Thread hin ti

public static void FreeNamedDataSlot(string name)


Loi b s lin kt gia mt name v mt slot, cho tt c Thread trong tin trnh.
tng hiu sut, s dng cc Field m c nh du vi attribute l
ThreadStaticAttribute thay th

public static Object GetData(LocalDataStoreSlot slot)


Thu hi gi tr t slot xc nh trn Thread hin ti, bn trong min hin ti ca
Thread hin ti. tng hiu sut, s dng cc Field m c nh du vi attribute
l ThreadStaticAttribute thay th

10

public static AppDomain GetDomain()


Tr v min hin ti trong Thread ang chy

11

public static AppDomain GetDomain()

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 205

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Tr v mt nh danh min ng dng duy nht

12

public static LocalDataStoreSlot GetNamedDataSlot(string name)


Tm kim mt Named Data Slot. tng hiu sut, s dng cc Field m c nh
du vi attribute l ThreadStaticAttribute thay th

13

public void Interrupt()


Interrupt (ngt) mt Thread m trong trng thi WaitSleepJoin

14

public void Join()


Chn Thread ang gi ti khi mt Thread kt thc, trong khi tip tc thc hin COM v
SendMessage Pumping. Phng thc ny c cc mu c np chng khc nhau

15

public static void MemoryBarrier()


ng b truy cp b nh nh sau: Prosessor ang thc thi Thread hin ti khng th
sp xp li cc ch lnh theo mt cch m quyn truy cp b nh ti li gi n
MemoryBarrier thc thi sau khi cc truy cp b nh m theo sau li gi n
MemoryBarrier

16

public static void ResetAbort()


Hy mt Abort c yu cu cho Thread hin ti

17

public static void SetData(LocalDataStoreSlot slot, Object data)


Thit lp d liu trong slot cho trn Thread ang chy hin ti, cho min hin ti
ca Thread . tng hiu sut, s dng cc Field m c nh du vi attribute
l ThreadStaticAttribute thay th

18

public void Start()


Bt u mt Thread

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 206

http://vietjack.com/csharp/index.jsp
19

Copyright vietjack.com

public static void Sleep(int millisecondsTimeout)


Lm Thread dng trong mt khong thi gian

20

public static void SpinWait(int iterations)


Lm mt Thread i mt khong thi gian c xc nh trong tham s iterations

21

public static byte VolatileRead(ref byte address)


public static double VolatileRead(ref double address)
public static int VolatileRead(ref int address)
public static Object VolatileRead(ref Object address)
c gi tr ca mt Field. Gi tr ny l c vit mi nht bi bt k Prosessor no
trong mt my tnh, khng quan tm n s lng Prosessor hoc trng thi ca
Prosessor Cache. Phng thc ny c cc mu c np chng khc nhau. l
cc form trn

22

public static void VolatileWrite(ref byte address,byte value)


public static void VolatileWrite(ref double address, double value)
public static void VolatileWrite(ref int address, int value)
public static void VolatileWrite(ref Object address, Object value)
Ghi mt gi tr ti mt Field ngay lp tc, m gi tr ny l nhn thy cho tt c
Processor trong my tnh. Phng thc ny c cc mu c np chng khc nhau.
l cc form trn

23

public static bool Yield()


Lm Thread ang gi chuyn s thc thi cho Thread khc m sn sng chy
trn Processor hin ti. H iu hnh chn Thread chuyn ti

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 207

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

To Thread trong C#
Trong C#, cc Thread c to bng vic k tha lp Thread. Sau , Lp Thread c k tha
gi phng thc Start() bt u s thc thi ca Thread con.
Sau y l v d minh ha vic to Thread trong C#:
using System;
using System.Threading;

namespace MultithreadingApplication
{
class ThreadCreationProgram
{
public static void CallToChildThread()
{
Console.WriteLine("Child thread starts");
}

static void Main(string[] args)


{
ThreadStart childref = new ThreadStart(CallToChildThread);
Console.WriteLine("In Main: Creating the Child thread");
Thread childThread = new Thread(childref);
childThread.Start();
Console.ReadKey();
}
}
}

Khi code trn c bin dch v thc thi, n s cho kt qu:


In Main: Creating the Child thread
Child thread starts

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 208

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Qun l Thread trong C#


Lp Thread trong C# cung cp cc phng thc a dng qun l cc Thread.
V d sau minh ha cch s dng phng thc sleep() lm mt Thread dng trong mt khong
thi gian c th.
using System;
using System.Threading;

namespace MultithreadingApplication
{
class ThreadCreationProgram
{
public static void CallToChildThread()
{
Console.WriteLine("Child thread starts");

// the thread is paused for 5000 milliseconds


int sleepfor = 5000;

Console.WriteLine("Child Thread Paused for {0} seconds", sleepfor / 1000);


Thread.Sleep(sleepfor);
Console.WriteLine("Child thread resumes");
}

static void Main(string[] args)


{
ThreadStart childref = new ThreadStart(CallToChildThread);
Console.WriteLine("In Main: Creating the Child thread");
Thread childThread = new Thread(childref);
childThread.Start();
Console.ReadKey();
}
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 209

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Khi code trn c bin dch v thc thi, n s cho kt qu:


In Main: Creating the Child thread
Child thread starts
Child Thread Paused for 5 seconds
Child thread resumes

Hy Thread trong C#
Phng thc Abort() c s dng hy cc Thread trong C#.
Trong thi gian runtime, chng trnh hy b Thread bng vic nm mtThreadAbortException.
Exception ny khng th c bt, iu khin c gi ti khifinally, nu l khng.
Di y l chng trnh minh ha vic s dng phng thc Abort() hy b cc Thread trong
C#:
using System;
using System.Threading;

namespace MultithreadingApplication
{
class ThreadCreationProgram
{
public static void CallToChildThread()
{
try
{
Console.WriteLine("Child thread starts");

// do some work, like counting to 10


for (int counter = 0; counter <= 10; counter++)
{
Thread.Sleep(500);
Console.WriteLine(counter);

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 210

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Console.WriteLine("Child Thread Completed");


}

catch (ThreadAbortException e)
{
Console.WriteLine("Thread Abort Exception");
}
finally
{
Console.WriteLine("Couldn't catch the Thread Exception");
}
}

static void Main(string[] args)


{
ThreadStart childref = new ThreadStart(CallToChildThread);
Console.WriteLine("In Main: Creating the Child thread");
Thread childThread = new Thread(childref);
childThread.Start();

//stop the main thread for some time


Thread.Sleep(2000);

//now abort the child


Console.WriteLine("In Main: Aborting the Child thread");

childThread.Abort();
Console.ReadKey();
}
}
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 211

http://vietjack.com/csharp/index.jsp

Copyright vietjack.com

Khi code trn c bin dch v thc thi, n s cho kt qu:


In Main: Creating the Child thread
Child thread starts
0
1
2
In Main: Aborting the Child thread
Thread Abort Exception
Couldn't catch the Thread Exception

Ti liu tham kho C#


Cc ngun sau cha thng tin b sung v C#. Mong bn tham kho chng hiu su hn cc
ch c trnh by trong lot bi ny.

Link hu ch v C#

Tutorialspoint Lot bi hng dn ca chng ti xy dng da trn ngun ny.

C# Programming Guide Cung cp thng tin chi tit v cc c im ct li ca ngn ng


C#.

Visual Studio Ti phin bn mi nht ca Visual Studio m lm vic nh l C# IDE.

Go Mono Mono l mt nn tng c thit k cho php cc lp trnh vin d dng to


cc Cross Platform Application (ng dng a nn tng).

C Sharp (programming language) Wikipedia v C#.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 212

You might also like