특정한 형태를 갖는 하나 이상의 함수를 호출할 수 있는 클래스다 라고 정의되어 있던데.
개인적으로는 C++의 함수포인터랑 비슷하다.
C++의 함수포인터는 어느 함수안에서도 선언해서 쓸 수 있고 다른 함수를 가리키도록 변경이 가능하지만 닷넷에서 위임기능은 일단 생성후에는 위임이 가리키고 있는 함수를 변경할 수 없다.
그럼 뭐에 쓰느냐. 다중 위임기능를 이용해서 여러 함수 호출하는것을 하나로 묶어서 한큐에 실행 할 수 있다 라는 이런 장점(?)이 있어 보인다. 실무에서는 어떠한 용도로 쓰는지는 잘 모르겠다.
static 멤버함수 위임하기.
using namespace System; __delegate double NumericOp(double); __gc class Ops{ public: static double square(double d){ return d*d; } }; int main(){ NumericOp *pOp = new NumericOp(0,&Ops::square); double a = 3.3; a = pOp->Invoke(a); Console::WriteLine(a); return 0; }
멤버함수 위임하기
using namespace System; __delegate double NumericOp(double); __gc class Ops{ public: double square(double d){ return d*d; } }; int main(){ Ops *op = new Ops(); NumericOp *pOp = new NumericOp(op,&Ops::square); double a = 3.3; a = pOp->Invoke(a); Console::WriteLine(a); return 0; }
다중멤버함수 위임하기
using namespace System; __delegate void NumericOp(); __gc class Ops{ public: void test(){ Console::WriteLine(L"MulticastDelegate Test1"); } }; __gc class Ops2{ public: void test(){ Console::WriteLine(L"MulticastDelegate Test2"); } }; int main(){ Ops *op = new Ops(); Ops2 *op2 = new Ops2(); NumericOp *pOp = new NumericOp(op,&Ops::test); NumericOp *pOp2 = new NumericOp(op2,&Ops2::test); NumericOp *pOp3 = dynamic_cast<NumericOp*>(Delegate::Combine(pOp,pOp2)); pOp3->Invoke(); return 0; }
pOp3 하나로 두개를 한큐에 호출할 수도 있고 나중에 이것저것 조합해서 한큐에 여러개를 실행 할 수 있다는 장점이 있다. 조합한 위임도 중간에 원하지 않는 것은 넣다 뺐다 할 수 있으니 마음껏 조합하시라.
답글 남기기