Top Banner

of 12

Bài Tập Về Generic

Feb 20, 2018

Download

Documents

Dao Nguyen Minh
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 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