델리게이트(delegate)
: 메소드를 참조하기 위한 기법으로 이벤트와 스레드를 처리하는데 주로 사용
C/C++언어에서의 함수 포인터와 유사한 기능을 갖고 있지만 함수 포인터보다는 객체지향적이며 타입 안정적이다.
델리게이트가 객체지향적이라는 이유는 델리게이트가 정적 메소드 뿐만 아니라, 인스턴스 메소드도 참조 할 수 있기 때문이다.
타입 안정적
-델리게이트의 형태와 참조할 메소드의 형태가 항상 일치해야함!!!!!!
-모든 델리게이트는 묵시적으로 System.Delegate클래스를 상속한 클래스 형으로 간주된다.
-델리게이트 객체를 생성하는 것은 클래스 객체를 생성하는것과 유사하다.
-델리게이트 객체를 통하여 메소드를 호출할 수 있다는 점이 특징적이다.
델리게이트의 정의
[수정자] delegate [반환형] 델리게이트이름(파라먼트);
using System;
using System.Collections.Generic;
using System.Text;
namespace DelegateCall
{
delegate void firstDelegate(); //인자값이 없고 반환형이 void 인 델리게이트
delegate void secondDelegate(int i); //인자값이 하나가 있고 반환형이 void인 델리게이트
public class TestDelegate
{
public void Go()
{
Console.WriteLine("총알이 나갑니다.");
}
public void GoBomb(int i)
{
Console.WriteLine("폭탄이 {0}개나갑니다.",i);
}
}
class Program
{
static void Main(string[] args)
{
TestDelegate TD = new TestDelegate(); //클래스 인스턴스
firstDelegate Del1 = new firstDelegate(TD.Go); //델리게이트 인스턴스
secondDelegate Del2 = new secondDelegate(TD.GoBomb); //델리게이트 인스턴스
Del1(); //델리게이트안의 메서드 실행
Del2(2); //델리게이트안의 메서드 실행
}
}
}
GoBomb 메서드의 형태는 secondDelegate 형태와 같아야 사용할 수 있다.
delegate void secondDelegate(int i); == public void GoBomb(int i)
:반환형과 파라먼트 갯수가 일치한다.
Go메서드의 형태는 firstDelegate 형태와 같아야 사용 할 수 있다.
delegate void firstDelegate(); == public void Go()
:반환형과 파라먼트 갯수가 일치한다.
[출처] 델리게이트 간단한 이론 정리 (know-where) |작성자 현우
'개발 > Objective-C' 카테고리의 다른 글
Objective-C 기초 (0) | 2010.09.06 |
---|---|
OBJECT-C 아키텍쳐 (0) | 2010.09.06 |
Object-c에서의 delegate (1) | 2010.09.06 |
retain 관련 알아둘것 (0) | 2010.09.06 |
프로퍼티 (0) | 2010.09.01 |