Bài Tập Về Generic

Embed Size (px)

Citation preview

  • 7/24/2019 Bi Tp V Generic

    1/12

    Bi tp v Generic

    1. Generic ClassesBi 1:namespaceGenerics_Class_Ex1{

    classGen {

    T ob;

    publicGen(T o){ ob = o;

    }

    publicT getob() { returnob;

    }

    publicvoidshowType() {

    Console.WriteLine("Tpe o! T is " tpeo!(T));

    }

    } classainClass {

    publicstaticvoidain() {

    #en i$b = ne%#en(&');

    i$b.showType(); intv = i$b.getob(); Console.WriteLine("value " v);

    Console.WriteLine();

    #en str$b = ne%#en("#enerics add po%er.");

    str$b.showType();

    strin*str = str$b.getob(); Console.WriteLine("value " str); }

    }

    }

    Bi tp Generics- GVC Ths. Nguyn Minh o Trang 1

  • 7/24/2019 Bi Tp V Generic

    2/12

    Bi !:

    namespaceGenerics_Class_Ex!{

    classTwoGen {

    T ob&;

    , ob;

    publicTwoGen(T o&+ , o)

    { ob& = o&;

    ob = o;

    }

    publicvoidshowTypes() {

    Console.WriteLine("Tpe o! T is " tpeo!(T));

    Console.WriteLine("Tpe o! , is " tpeo!(,)); }

    publicT getT() {

    returnob&;

    } public, get"() {

    returnob;

    }

    }

    classainClass {

    publicstaticvoidain() {

    T%o#en t*$b- = ne%T%o#en(&+ "");

    t*$b-.showTypes();

    intv = t*$b-.getT(); Console.WriteLine("value " v); strin*str = t*$b-.get"(); Console.WriteLine("value " str);

    }

    }}

    Bi tp Generics- GVC Ths. Nguyn Minh o Trang 2

  • 7/24/2019 Bi Tp V Generic

    3/12

    !. Generic #nter$aceBi 1

    namespaceGenerics_#nter$aces_Ex1{

    inter!aceGeneric#nter$ace {

    T get"al%e(T t,alue); }

    classyClass Generic#nter$ace {

    publicT get"al%e(T t,alue) {

    returnt,alue;

    }

    }

    classainClass

    { staticvoidain() {

    /Class int$b-ect = ne%/Class();

    /Class strin*$b-ect = ne%/Class();

    Console.WriteLine("{'}"+ int$b-ect.get"al%e(0)); Console.WriteLine("{'}"+ strin*$b-ect.get"al%e("1i t2ere.")); }

    }

    }

    Bi !

    namespaceGenerics_#nter$aces_Ex!{ 33 4mplement multiple *eneric inter!aces b a non5*eneric class

    inter!aceGeneric#nter$ace {

    T get"al%e(T in,alue); }

    classyClass Generic#nter$ace+ Generic#nter$ace

    Bi tp Generics- GVC Ths. Nguyn Minh o Trang

  • 7/24/2019 Bi Tp V Generic

    4/12

    {

    publicintget"al%e(intin,alue) { returnin,alue;

    }

    publicstrin*get"al%e(strin*in,alue) {

    returnin,alue;

    } }

    classainClass {

    staticvoidain() {

    /ClassTriv4nt = ne%/Class(); /ClassTriv6trin* = ne%/Class();

    Console.WriteLine("{'}"+ Triv4nt.get"al%e(0)); Console.WriteLine("{'}"+ Triv6trin*.get"al%e("1i t2ere."));

    } }

    }

    Bi &

    namespaceGenerics_#nter$aces_Ex&{ 33 #eneric 4nter!ace !or binar operation

    publicinter!ace#Binary'perations {

    T ())(T ar*&+ T ar*); T *%btract(T ar*&+ T ar*); T %ltiply(T ar*&+ T ar*); T +ivi)e(T ar*&+ T ar*); }

    publicclassBasicath #Binary'perations {

    publicBasicath() { }

    publicint())(intar*&+ intar*)

    Bi tp Generics- GVC Ths. Nguyn Minh o Trang !

  • 7/24/2019 Bi Tp V Generic

    5/12

    { returnar*& ar*; }

    publicint*%btract(intar*&+ intar*) { returnar*& 5 ar*; }

    publicint%ltiply(intar*&+ intar*) { returnar*& 7 ar*; }

    publicint+ivi)e(intar*&+ intar*)

    { returnar*& 3 ar*; }

    }

    class,rogra- {

    staticvoidain(strin*89 ar*s) { :asic/at2m = ne%:asic/at2();

    Console.WriteLine("& & = {'}"+ m.())(&+ &)); }

    }

    }

    Bi

    33Tpe parameter T in an*le bracets.

    publicclass#enericList 6stem.Collections.#eneric.4numerable

    {

    protectedode 2ead;

    protectedode current = null;

    33 ested class is also *eneric on T

    protectedclassode

    {

    publicode net;

    privateT data; 33T as private member datatpe

    publicode(T t) 33T used in non5*eneric constructor

    {

    net = null;

    data = t;

    }

    Bi tp Generics- GVC Ths. Nguyn Minh o Trang "

  • 7/24/2019 Bi Tp V Generic

    6/12

    publicode et

    {

    *et{ returnnet; } set{ net = value; }

    }

    publicT ?ata 33T as return tpe o! propert

    {

    *et{ returndata; }

    set{ data = value; } }

    }

    public#enericList() 33constructor

    {

    2ead = null;

    }

    publicvoiddd1ead(T t) 33T as met2od parameter tpe

    {

    ode n = ne%ode(t);

    n.et = 2ead; 2ead = n;

    }

    33 4mplementation o! t2e iterator

    public6stem.Collections.#eneric.4numerator #etnumerator()

    {

    ode current = 2ead;

    %2ile(current @= null)

    {

    ieldreturncurrent.?ata;

    current = current.et;

    } }

    33 4numerable in2erits !rom 4numerable+ t2ere!ore t2is class

    33 must implement bot2 t2e *eneric and non5*eneric versions o!

    33 #etnumerator. 4n most cases+ t2e non5*eneric met2od can33 simpl call t2e *eneric met2od.

    6stem.Collections.4numerator 6stem.Collections.4numerable.#etnumerator()

    {

    return#etnumerator();

    }

    }

    publicclass6ortedList #enericList %2ereT 6stem.4Comparable

    {

    33 simple+ unoptimiAed sort al*orit2m t2at

    33 orders list elements !rom lo%est to 2i*2est

    publicvoid:ubble6ort()

    { i!(null== 2ead BB null== 2ead.et)

    Bi tp Generics- GVC Ths. Nguyn Minh o Trang #

  • 7/24/2019 Bi Tp V Generic

    7/12

    {

    return;

    } bools%apped;

    do

    {

    ode previous = null;

    ode current = 2ead;

    s%apped = !alse;

    %2ile(current.net @= null)

    {

    33 :ecause %e need to call t2is met2od+ t2e 6ortedList

    33 class is constrained on 4numerable

    i!(current.?ata.CompareTo(current.net.?ata) > ')

    { ode tmp = current.net;

    current.net = current.net.net;

    tmp.net = current;

    i!(previous == null) {

    2ead = tmp;

    }

    else

    {

    previous.net = tmp;

    }

    previous = tmp;

    s%apped = true;

    }

    else

    { previous = current; current = current.net;

    }

    }

    } %2ile(s%apped); }

    }

    33 simple class t2at implements 4Comparable usin* itsel! as t2e

    33 tpe ar*ument. T2is is a common desi*n pattern in ob-ects t2at

    33 are stored in *eneric lists.

    publicclasserson 6stem.4Comparable

    {

    strin*name;

    inta*e;

    publicerson(strin*s+ inti)

    {

    name = s; a*e = i;

    Bi tp Generics- GVC Ths. Nguyn Minh o Trang $

  • 7/24/2019 Bi Tp V Generic

    8/12

    }

    33 T2is %ill cause list elements to be sorted on a*e values. publicintCompareTo(erson p)

    {

    returna*e 5 p.a*e;

    }

    publicoverridestrin*To6trin*()

    { returnname "" a*e;

    }

    33 /ust implement Duals.

    publicboolDuals(erson p)

    {

    return(t2is.a*e == p.a*e); }

    }

    classro*ram

    { staticvoid/ain()

    {

    33?eclare and instantiate a ne% *eneric 6ortedList class.

    33erson is t2e tpe ar*ument.

    6ortedList list = ne%6ortedList();

    33Create name and a*e values to initialiAe erson ob-ects.

    strin*89 names = ne%strin*89

    {

    "Eranscoise"+

    ":ill"+

    "Li"+"6andra"+"#unnar"+

    "lo"+

    "1iroui"+

    "/aria"+"lessandro"+

    "Faul"

    };

    int89 a*es = ne%int89 { G0+ &H+ I+ J+ &I+ H+ &'I+ K+ J'+ J0 };

    33opulate t2e list.

    !or(int = '; < &'; )

    {

    list.dd1ead(ne%erson(names89+ a*es89));

    }

    33rint out unsorted list.

    !oreac2(erson p inlist) {

    Bi tp Generics- GVC Ths. Nguyn Minh o Trang %

  • 7/24/2019 Bi Tp V Generic

    9/12

    6stem.Console.WriteLine(p.To6trin*());

    }

    6stem.Console.WriteLine("?one %it2 unsorted list");

    336ort t2e list.

    list.:ubble6ort();

    33rint out sorted list.

    !oreac2(erson p inlist)

    { 6stem.Console.WriteLine(p.To6trin*());

    }

    6stem.Console.WriteLine("?one %it2 sorted list");

    }

    }

    Generic *tac/

    Bi 1namespaceGenerics_*tac/_Ex1{

    classainClass {

    publicstaticvoidain() {

    6tac st = ne%6tac();

    Bi tp Generics- GVC Ths. Nguyn Minh o Trang &

  • 7/24/2019 Bi Tp V Generic

    10/12

    st.,%sh("$ne"); st.,%sh("T%o"); st.,%sh("T2ree"); st.,%sh("Eour"); st.,%sh("Eive");

    %2ile(st.Count > ')

    {

    strin*str = st.,op(); Console.Write(str " "); }

    Console.WriteLine();

    }

    }

    }

    Bi !

    namespaceGenerics_*tac/_Ex!{

    classy*tac/ {

    intax*tac/= &';

    T89 *tac/(rray; int*tac/,ointer= ';

    publicy*tac/() { 6tacrra = ne%T8/a6tac9;

    }

    publicvoid,%sh(T ) {

    i!(6tacointer < /a6tac)

    6tacrra86tacointer9 = ;

    }

    publicT ,op() {

    return(6tacointer > ')

    Bi tp Generics- GVC Ths. Nguyn Minh o Trang 1'

  • 7/24/2019 Bi Tp V Generic

    11/12

    6tacrra8556tacointer9

    6tacrra8'9;

    }

    publicvoid,rint() {

    !or(inti = 6tacointer 5 &; i >= '; i55)

    Console.WriteLine(" ,alue {'}"+ 6tacrra8i9);

    }

    }

    classainClass {

    staticvoidain() {

    /6tac 6tac4nt = ne%/6tac();

    /6tac 6tac6trin* = ne%/6tac();

    6tac4nt.,%sh(J); 6tac4nt.,%sh(K); 6tac4nt.,rint();

    6tac6trin*.,%sh("T2is is !un"); 6tac6trin*.,%sh("1i t2ere@ "); 6tac6trin*.,rint(); }

    }

    }

    Bi &

    na(espaceGenerics_Stack_Ex3

    ) c*assMainClass ) pu+*icstatic,oiMainstring/0 args ) Create an use a 3tac4 o5 6sse(+*y Na(e o+7ects 3tac48MyC*ass9 stac4 : ne;3tac48MyC*ass9