56
Ngôn ng l p trình C# Ch ng 2 ThS. Tôn Quang To i [email protected]

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 ni m ph ng th c (method) và hàm (function) là ng ngh a v i nhau. c là o n mã

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

  • 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