ch ng 2 ngôn ng l p trình c#...thân c a l p ph ng th c ph ng th c và tham s • trong c#, khái...
TRANSCRIPT
-
Ngôn ng l p trình C#Ch ng 2
ThS. Tôn Quang To [email protected]
-
2
N i dung
� T ng quan C#� Các thành ph n c b n c a ngôn ng� H th ng ki u trong .NET� Namespace � Các câu l nh
� L p� Th a k� Property, M ng và Indexer� L p collection
� Interface� Delegate và event handler� X lý Ngo i l
-
L p
-
4
nh ngh a l p
� nh ngh a l p• Cú pháp:
[attributes] [modifiers] class [:BaseClassN ame]{
[class-body]
}[;]
1 2
-
5
nh ngh a l p
� Ví d class NhanVien{
private long maNV;}
class MyClass{
// members}
class MyClass{
// members};
� Không c n thi t ph i “;” k t thúc l p.
Access modifier
-
6
Thân c a l p
� M t l p trong C# có th ch a các lo i thành viên• Constants• Fields• Methods • Operators• Properties• Events• Indexers• Instance constructors, static constructors • Destructors
• Các ki u khai báo l ng nhau (class, struct, interface, enum, delegate)
-
7
Thân c a l p
public class First{
const int MAX = 5;string name;
public int Say(string message){
return message + “ ” + name;}
public class Second{
…}
}
Ki u m c cao nh t
(top-level)
Ki u b l ng (nested)
-
8
B t truy c pCho ki u m c cao nh t
� Có 2 b t truy c p cho ki u m c cao nh t• public• internal
� DEFAULT: internal
public class AccessTypeInCSharp{
}
class AccessInCSharp{
}
internal class AccessInCSharp{
}
-
9
B t truy c pCho thành viên
� Có 5 b t truy c p cho thành viên• public• protected• private
• internal• internal protected
� DEFAULT: private
class AccessMembersInCSharp{
public int a; public int b; public int c; protected int d;protected int e;
}
-
10
B t truy c pCho thành viên
class AccessMembersInCSharp{public:
int a;int b;int c;
protected:int d;int e;
};
class AccessMembersInCSharp{
public int a; public int b; public int c; protected int d;protected int e;
}
C++
C#
class AccessMembersInCSharp{
protected int a; int b;
}
-
11
B t truy c pCho thành viên
� N u ki u có b t truy c p là internal (hay không có b t truy c p) thì các thành viên c a ki u này có th khai báo 3 c p truy c p (gi ng C++)• public = internal = internal protected• protected• private
� N u ki u có b t truy c p là public thì các thành viên c a ki u này có th khai báo 5 c p truy c p• public• protected• private• internal• internal protected
-
12
Thân c a l pField
� Field• M t field là m t bi n thành viên dùng
gi giá tr c a m t i t ng• Cú pháp: ;
• Trong ó có th là– Ki u c s : char, int, float, double, …– Enum– Struct– Class – Delegate
-
13
Thân c a l pField
• Quy t c v khai báo Field– Field có th là m t i t ng c a l p ang
nh ngh a
– Có th v a khai báo, v a kh i t o d li ucho field
-
14
Thân c a l pPh ng th c
� Ph ng th c và tham s• Trong C#, khái ni m ph ng th c (method) và hàm
(function) là ng ngh a v i nhau. c lào n mã thao tác trên các field.
• Trong C#, nh ngh a ph ng th c theo quy t c– Ph ng th c ph i n m trong class hay struct– Thân c a ph ng th c n m trong nh ngh a l p (ngh a
là không có s phân bi t gi a khai báo và nh ngh a ph ng th c)
-
15
Thân c a l pPh ng th c
class ClassName{
Method(int data){
…}
}class Program{
static void Main(){
int x = 7;
ClassName obj = new ClassName();obj.Method(x);
}}
Tham shình th c
Tham sth c
-
16
Thân c a l pPh ng th c
� Các tham s c a ph ng th c: có 2 lo i tham s• Tham s giá tr (Value parameter – tham tr ):
– Khi g i ph ng th c có tham s giá tr thìchúng ta ang g i m t b n sao c a tham sth c cho ph ng th c (b t k i d li u c a tham s c c ng khôngnh h ng n d li u ban u c l u trong
tham s th c)– ây là cách truy n m c nh
-
17
Thân c a l pPh ng th c
class SomeClass{
public void Change(int data){
data = data*2;}
}class Program{
static void Main(){
SomeClass obj = new SomeClass();int x=7;obj.Change(x);Console.WriteLine(“x=” + x);
}}
� Tham tr v i ki u giá tr
-
18
Thân c a l pPh ng th c
class AnotherClass{
public int data;}class SomeClass{
public void Change(AnotherClass obj){
obj = new AnotherClass();obj.data = 100;
}}class Program{
static void Main(){
AnotherClass at = new AnotherClass()SomeClass sc = new SomeClass();at.data = 7;sc.Change(at);Console.WriteLine(“data=” + at.data);
}}
� Tham tr v i ki u tham chi u
-
19
Thân c a l pPh ng th c
class AnotherClass{
public int data;} class SomeClass{
public void Change(AnotherClass obj){
obj.data = obj.data*2;}
}class Program{
static void Main(){
AnotherClass at = new AnotherClass()SomeClass sc = new SomeClass();at.data = 7;sc.Change(at);Console.WriteLine(“data=” + at.data);
}}
� Tham tr v i ki u tham chi u
-
20
Thân c a l pPh ng th c
class SomeClass{
public void Change(string data){
data = “New String”;}
}class Program{
static void Main(){
SomeClass obj = new SomeClass();string s=“Old String”;obj.Change(s);Console.WriteLine(“s=” + s);
}}
� Tham tr v i ki u giá tr
-
21
Thân c a l pPh ng th c
• Tham s tham chi u (tham chi u): – Khi g i ph ng th c có tham s tham chi u,
thì tham s th c và tham s hình th c u chn cùng ô nh (b t k i d li u c a
tham s c c ng nh h ng n d li u ban u c l u trong tham s
th c)
– Thêm modifier: ref hay out
-
22
Thân c a l pPh ng th c
class ClassName{
void Square1(int x){…}
void Square2(ref int x){…}
void Square3(out int x)}
-
23
Thân c a l pPh ng th c
� Ph ng th c v i tham s ref• Cú pháp:
class ClassName{
Method(ref type variableName){
…}
}
-
24
Thân c a l pPh ng th c
• Cú pháp: s d ng ph ng th c có tham sref
variableName = value;Method(ref variableName);
• Chú ý – Tham s th c ph i c kh i t o tr c khi g i
ph ng th c.– M i thay i giá tr trong tham s hình th c u
thay i giá tr trong tham s th c.
-
25
Thân c a l pPh ng th c
class SomeClass{
public void HoanVi(ref int x, ref int y){
int tam = x;x = y;y = tam;
}}class Program{
static void Main(){
SomeClass obj = new SomeClass();int x=7, y=9;obj.HoanVi(ref x, ref y);Console.WriteLine(“x={0} y={1}”, x, y);
}}
� Tham chi u v i ki u giá tr
-
26
Thân c a l pPh ng th c
class SomeClass{
public void HoanViChuoi(ref string s1, ref string s2){
string s = s1;s1 = s2;s2 = s;
}}class Program{
static void Main(){
SomeClass obj = new SomeClass();string x=“ABC”, y=“XYZ”;obj.HoanViChuoi(ref x, ref y);Console.WriteLine(“x={0} y={1}”, x, y );
}}
� Tham chi u v i ki u tham chi u
-
27
Thân c a l pPh ng th c
� Ph ng th c v i tham s out • Cú pháp
class ClassName(){
Method(out type variableName){
…variableName = …;
}}
-
28
Thân c a l pPh ng th c
• Cú pháp: s d ng ph ng th c có tham sout
//variableName = value;Method(out variableName);
• Chú ý– Tham s th c không nh t thi t ph i c kh i t o tr c
khi g i ph ng th c.– Giá tr c a tham s th c không c chuy n n tham
s hình th c, vì v y không c s d ng tham s hìnhth c trong ph ng th c n u ch a kh i t o.
– Tham s hình th c trong ph ng th c ph i c gán giá tr c khi ph ng th c k t thúc
-
29
Thân c a l pPh ng th c
class AnotherClass{
public int ID;}
class SomeClass{
public void Change1(out AnotherClass ref1){
ref1.ID = ref1.ID * 2;}public void Change2(out AnotherClass ref1){
ref1.ID = 4;}
-
30
Thân c a l pPh ng th c
public void Change3(out AnotherClass ref1){
int x = ref1.ID;ref1 = new AnotherClass();ref1.ID = x * 2;
}
public void Change4(out AnotherClass ref1){
ref1 = new AnotherClass();ref1.ID = 99;
}}
-
31
Thân c a l pPh ng th c
� Nh n xét: N u chúng ta• Ch mu n truy n giá tr vào cho ph ng th c
– Tham tr
• Ch mu n nh n 1 giá tr tr v t c– Dùng l nh return
• Ch mu n nh n nhi u giá tr tr v t c– Tham chi u out
• V a mu n truy n giá tr vào ph ng th c v a cho phép thay i giá tr ó
– Tham chi u ref
-
32
Thân c a l pPh ng th c
� Ph ng th c v i tham s params• Tham s params cho phép chúng ta t o ra
ph ng th c có s ng không xác nh các tham s
• Cú pháp
class ClassName{
Method(…, params type[] variableName){
…}
}
-
33
Thân c a l pPh ng th cclass SomeClass{
public int TinhTong(params int[] arr){
int sum = 0;for (int i=0; i
-
34
Thân c a l pPh ng th c
• Chú ý:– Khi dùng t khóa params thì m ng theo sau
params là tham s cu i cùng c a ph ng th c.
– C ng có th truy n 1 m ng cho ph ng th c
-
35
Thân c a l pMethod overloading
� M t ph ng th c c xác nh duy nh t b i Chký c a ph ng th c. Ch c thông th ng g m: Tên ph ng th c, s ng và ki u c a tham s , ki u tr v
� Trong C#, ch ký c a ph ng th c c xác nh b i: Tên ph ng th c, s ng và ki u c a tham s
� D trên ch ký c a ph ng th c, C# th c hi n ch c n ng method overloading: Cho chúng ta t o ra các ph ng th c trùng tên nh ng khác nhau v danh sách tham s .
-
36
Thân c a l pMethod overloading
class SomeClass{
public void WriteData(string data){
Console.WriteLine(data);}
public void WriteData(int resource){
Console.WriteLine(resource);
}
}
� Khác ki u tham s
-
37
Thân c a l pMethod overloading
class SomeClass{
public void WriteData(string data, int resource){
Console.WriteLine(data + “ ” + resource);}public void WriteData(int resource, string data){
Console.WriteLine(resource + “ ” + data);}
}
� Khác v th t các ki u tham s
-
38
Thân c a l pMethod overloading
class SomeClass{
public void WriteData(string data){
Console.WriteLine(data);}public int WriteData(string data){
Console.WriteLine(data);return data.Length;
}protected void WriteData(string data){
Console.WriteLine(data);}
}
� Khác nhau v Ki u trv và access modifier
-
39
Thân c a l pMethod overloading
class SomeClass{
public void WriteData(string data){
Console.WriteLine(data);}public void WriteData(ref string data){
Console.WriteLine(data);}
}
� Khác nhau v ref hay out
-
40
Thân c a l pMethod overloading
class SomeClass{
public void WriteData(ref string data){
Console.WriteLine(data);}public void WriteData(out string data){
data = “Empty”;Console.WriteLine(data);
}}
� Khác nhau gi a ref và out
-
41
Thân c a l pPh ng th c Toán t
� Operator Overloading• Toán t 1 ngôi
• Toán t 2 ngôi
falsetrue--++
~!-+
!=
&
=
>>
/
==
-
42
Thân c a l pPh ng th c Toán t
� Cú pháp
public static retval operator op (object1 [,object2])
� Quy t c t o ph ng th c toán t• T t c các ph ng th c toán t c nh ngh a:
public và static• Ki u tr v là b t k ki u nào (thông th ng là ki u mà
ph ng th c ang nh ngh a. Ngo i l , toán t true, false luôn tr v ki u bool)
• S ng tham s ph thu c vào s ngôi c a toán t• N u toán t 1 ngôi, tham s c a ph ng th c có ki u
là l p ang nh ngh a toán t
-
43
Thân c a l pPh ng th c Toán t
� Cú pháp
public static retval operator op (object1 [,object2])
• N u toán t 2 ngôi, tham s u tiên c a ph ng th c có ki u là l p ang nh ngh a
• Khi overload toán t 2 ngôi, phép gán k t h p c a toán t ó c t ng overload
• Toán t so sánh (>, =,
-
44
Thân c a l pPh ng th c Toán t
using System;public class Distance{
int longitude, latitude;public Distance(){
longitude = 0;latitude = 0;
}
public Distance(int longitude, int latitude){
this.longitude = longitude;this.latitude = latitude;
}
public static Distance operator - (Distance first, Distan ce second){
return new Distance(first.longitude - second.longitude ,first.latitude - second.latitude);
}}
-
45
Thân c a l pPh ng th c Constructor
� Constructor • Cú pháp
class ClassName{
public ClassName(…){…}
}
• Chú ý– Construtor c g i t ng khi m t instance c a l p
c t o. Không th g i ph ng th c constructor rõràng.
– Các constructor có th c a n ng hóa cung c ps a d ng cho vi c kh i t o i t ng.
– Ph ng th c constructor có th g i các ph ng th cconstrutor khác
-
46
Thân c a l pPh ng th c Destructor
� Destructor • Cú pháp
class ClassName{
public ~ClassName(){…}
}
• Chú ý– Không có b t k tham s nào– c g i b i Garbage Collector - GC
-
47
i t ng
� T o i t ng v i t khóa new • Khai báo m t bi n class
– Cú pháp ;
• T o m t i t ng– Cú pháp
= new (…); = new (…);
-
48
i t ng
CMyClass myClass;
CMyClass myClass = new CMyClass();
CMyClass myClass;
CMyClass myClass = new CMyClass();
C++
C#
-
49
i t ng
� Truy c p thành viên public• Cú pháp
ObjectName.Method(params);ObjectName.Field;
this.member
• Trong C# c ng có con tr this gi ng C++– Cú pháp
-
50
Thân c a l p Thành viên t nh
� Thành viên t nh (method, property, field, event)• Các thành viên t nh có th g i trên m t l p ngay
c khi không có instance nào c t o ra• Không th dùng các instance truy c p các
thành viên t nh • Ch có m t b n sao c a field t nh và event t nh
t n t i• Các method t nh và property t nh ch có th truy
c p các field t nh và event t nh
-
51
Thân c a l p Thành viên t nh
• Cú pháp
class ClassName{
public static type variableName;public static type MethodName(…){
…}public static type PropertyName{
get {…}set {…}
}public static event EventType EventName;
}
t nh
-
52
Thân c a l p Thành viên t nh
• Cú pháp: G i field và ph ng th c t nh
ClassName.variableName;ClassName.MethodName(…);ClassName.PropertyName;ClassName.EventName;
• Chú ý– N u không khai báo public thì thành viên t nh
ch c dùng cho các ph ng th c c a l p.– N u ph ng th c g i thành viên t nh trong
cùng l p thì dùng tên thành viên t nh khôngc n thông qua tên l p
-
53
Thân c a l p Field h ng
� Field h ng• Field h ng là m t field có giá tr không thay i
trong chu k s ng c a i t ng
• Ví d : const int x = 5;
• Quy t c: – Field h ng là field có giá tr c thi t l p lúc
biên d ch– Field h ng m c nhiên là t nh
-
54
Thân c a l p Field Read-Only
� Field Read-Only• Gi ng nh field h ng nh ng giá tr có th c
trì hoãn cho n khi ch ng trình b t u ch y(khi i t ng c a l p ch a field c t o)
• Giá tr c a field c kh i t o trong constructor hay khi khai báo
class CaptureApp{
public readonly uint data = (uint)DateTime.Now.Ticks;public readonly int screenColor;public CaptureApp(){
screenColor=65536;}
}
-
55
Thân c a l p Constructor t nh
� Constructor t nh• Constructor t nh là constructor c dùng
kh i t o t t k d li u static nào hay th c hi n m t hành ng ch th c hi n m t l n
class CaptureApp{
public readonly int screenColor;
static CaptureApp(){
screenColor=65536;}
}
-
56
Thân c a l p Constructor t nh
• Quy t c c a constructor t nh– Ch có duy nh t m t constructor t nh– Không có tham s hay access modifier– Không th truy c p thành viên không t nh (k
c con tr )– c g i tr c khi instance u tiên c t o
ra hay các thành viên static c dùng