21. VCP413 Лекцийн материал
class A{ //ñóóðü êëàññ};
class B : public A{ //public óäàìøèë}
class C : protected A{ //protected óäàìøèë}
class Z : private A{ //private óäàìøèë}
Машин класс нь Радио классыг агуулж "А Б-ийг агуулна" гэсэн харьцаагаар
удамшиж байна.
public class Radio
{
public void Power(bool turnOn)
{ Console.WriteLine(“Radio on: {0}”, turnOn);}
}
public class Car
{
// Машин радиог “агуулна”
private Radio myRadio = new Radio();
public void TurnOnRadio(bool onOff)
{
myRadio.Power(onOff);
}
}
5
31. VCP413 Лекцийн материал
MYDELEGATECALCULATION=NEW
DELEGATECALCULATION(MOTIONCALCULATIONS.DISTANCE);
DOUBLE DISTANCE = MYDELEGATECALCULATION(ACCELERATION, TIME);
CONSOLE.WRITELINE(“PAST DISTANCE=”+ DISTANCE +”M.”);
CONSOLE.READLINE();
}
}
¯ð ä¿í:
Зураг .1 delegate хэрэглэсэн нь
Програм бичих явцад дээрх FinalSpeed(), Distance() функцуудын аль дуудагдах нь
тодорхойгүй, програм ажиллах явцад л тодорхой болох үед делегатын хэрэглэж
байна. Дээрх жишээнд делегатын хэрэглээ оновчтой биш мэт харагдавч
системийн програмчлалд ашиглах нь элбэг. Функц делегатаар дуудагдахын тулд
эхлээд түүнд бүртгүүлсэн байх хэрэгтэй.
2 Delegatе-ын жишээнүүд
NAMESPACE SIMPLEDELEGATE
{
PUBLIC DELEGATE INT BINARYOP(INT X, INT Y);
PUBLIC CLASS SIMPLEMATH
{
PUBLIC STATIC INT ADD(INT X, INT Y) { RETURN X + Y; }
PUBLIC STATIC INT SUBTRACT(INT X, INT Y) { RETURN X - Y; }
}
CLASS PROGRAM
{
STATIC VOID MAIN(STRING[] ARGS)
{
CONSOLE.WRITELINE(“***** SIMPLE DELEGATE EXAMPLE *****N”);
BINARYOP B = NEW BINARYOP(SIMPLEMATH.ADD);
CONSOLE.WRITELINE(“10 + 10 IS {0}”, B(10, 10));
CONSOLE.READLINE();
} } }
¯ð ä¿í:
Зурàã .2 delegate-н энгийн жишээ
2
32. VCP413 Лекцийн материал
Энэ програмаар бид 2 статик функц тодорхойлдог SimpleMath нэртэй класс үүсгэж
байна. .NET-ийн delegate бол type-safe болохоор хэрэв дараалал, бүтэц буруу
delegate функц дуудвал компиляцийн алдаа өгөх болно. public class SimpleMath
{
...
PUBLIC STATIC INT SQUARENUMBER(INT A)
{ RETURN A * A; }
}
BinaryOp Delegate нь 2 Integer угга авч 1 Interger утга буцаадаг тул доорх байдлаар
бичвэл алдаа заах болно:
BINARYOP B = NEW BINARYOP (SIMPLEMATH.SQUARENUMBER ) ;
3. Multi Delegate-ыг хэрэглэх
Delegate нь олон методыг бүртгээд дарааллаар нь дуудахыг мултикастинг буюу
Multi Delegate гэдэг. Методыг нэмж дуудахдаа += үйлдлийг, хасаж дуудахдаа -=
¿йлдлийг ашигладаг.
USING SYSTEM;
USING SYSTEM.COLLECTIONS.GENERIC;
USING SYSTEM.TEXT;
NAMESPACE MULTIDELEGATE {
CLASS PROGRAM {
PUBLIC DELEGATE VOID LINEPRINT(STRING S);
PUBLIC STATIC VOID TOLOWER(STRING S)
{
CONSOLE.WRITELINE(S.TOLOWER());
}
PUBLIC STATIC VOID TOUPPER(STRING S)
{
CONSOLE.WRITELINE(S.TOUPPER());
}
STATIC VOID MAIN(STRING[] ARGS) {
LINEPRINT P;
P = NEW LINEPRINT(TOLOWER);
P += NEW LINEPRING(TOUPPER);
P(“I LOVE KHULAN”);
CONSOLE.READLINE();
}
}
}
¯ð ä¿í:
Çóðàã 6.3. Multi Delegate
4 Delegatе объектын талаар
Дээрх SimpleDelegate жишээгээ DisplayDelegateInfo() нэртэй туслах функцээр
баяжуулъя. Энý функц нь System.Delegate-аас ирсэн функцийн нэрийг, тухайн
функцийн тодорхойлсон классын нэрийг мºн хэвлэдэг. GetIVocationList()-ээс
3
33. VCP413 Лекцийн материал
буцаагдсан System.Delegate массиваар давталт гүйх áа Target, Method ргорегty-
нуудыг дуудна:
NAMESPACE SIMPLEDELEGATE {
PUBLIC DELEGATE INT BINARYOP(INT X, INT Y);
PUBLIC CLASS SIMPLEMATH
{
PUBLIC STATIC INT ADD(INT X, INT Y) { RETURN X + Y; }
PUBLIC STATIC INT SUBTRACT(INT X, INT Y) { RETURN X - Y; }
}
CLASS PROGRAM
{
STATIC VOID DISPLAYDELEGATEINFO(DELEGATE DELOBJ)
{
FOREACH (DELEGATE D IN DELOBJ.GETINVOCATIONLIST())
{
CONSOLE.WRITELINE(“METHOD NAME: {0}”, D.METHOD);
CONSOLE.WRITELINE(“TYPE NAME: {0}”, D.TARGET);
}
}
STATIC VOID MAIN(STRING[] ARGS)
{
CONSOLE.WRITELINE(“**SIMPLE DELEGATE EXAMPLE *N”);
SIMPLEMATH M = NEW SIMPLEMATH();
BINARYOP B = NEW BINARYOP(SIMPLEMATH.ADD);
DISPLAYDELEGATEINFO(B);
CONSOLE.WRITELINE(“N10 + 10 IS {0}”, B(10, 10));
CONSOLE.READLINE();
}
}
}
¯ð ä¿í:
Çóðàã 6.4. delegate îáúåêòèéí ãèø¿¿äèéã õàðàõ
4