닷넷에서 위임이란.

현재 페이지를 로딩중입니다.
만약 페이지 로딩이 끝났는데 본문이 보이지 않는다면
광고차단 플러그인 때문이니 잠시 플러그인을 꺼주시면 감사하겠습니다.

The current page is loading.
If the page loading is over but the text is not visible
This is because of the ad blocking plugin, so please be sure to turn off the plugin for a while.

특정한 형태를 갖는 하나 이상의 함수를 호출할 수 있는 클래스다 라고 정의되어 있던데.

개인적으로는 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 하나로 두개를 한큐에 호출할 수도 있고 나중에 이것저것
조합해서 한큐에 여러개를 실행 할 수 있다는 장점이 있다.
조합한 위임도 중간에 원하지 않는 것은 넣다 뺐다 할 수 있으니 마음껏 조합하시라.

크리에이티브 커먼즈 라이선스 Linsoo의 저작물인 이 저작물은(는)크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

댓글 남기기

이메일은 공개되지 않습니다.

This site uses Akismet to reduce spam. Learn how your comment data is processed.