Delegate 에 대해 자세히 이야기 하 다 (1)
[SerializableAttribute]
[ClassInterfaceAttribute(ClassInterfaceType.AutoDual)]
[ComVisibleAttribute(true)]
public abstract class Delegate : ICloneable, ISerializable
Delegate 류 는 위탁 유형의 기본 클래스 입 니 다.그러나 시스템 과 컴 파일 러 만 Delegate 류 나 MulticastDelegate 류 에서 명시 적 으로 파생 될 수 있다.위탁 유형 에서 새로운 유형 을 파생 시 키 는 것 도 허용 되 지 않 는 다.Delegate 류 는 의뢰 유형 이 아니 라 파생 의뢰 유형 에 사 용 됩 니 다.
대부분의 언어 는 delegate 키 워드 를 실현 하 는데 이런 언어의 컴 파일 러 는 MulticastDelegate 류 에서 파생 될 수 있다.따라서 사용 자 는 언어 가 제공 하 는 delegate 키 워드 를 사용 해 야 합 니 다.
위탁 유형의 성명 은 하나의 협정 을 맺 었 고, 이 협정 은 하나 이상 의 방법의 서명 을 지정 했다.의뢰 는 다음 과 같은 내용 을 참조 하 는 의뢰 유형 을 가 진 인 스 턴 스 입 니 다.
의뢰 가 첫 번 째 매개 변 수 를 통 해 닫 는 인 스 턴 스 방법 (가장 흔 한 경우) 을 표시 할 때 이 방법의 입구 점 에 대한 인용 과 대칭 을 목표 로 하 는 대상 (이 대상 은 이 방법 을 정의 할 수 있 는 유형 이 있 음) 에 대한 인용 을 저장 합 니 다.의뢰 가 개방 식 인 스 턴 스 방법 을 표시 할 때 이 방법 입구 점 에 대한 인용 을 저장 합 니 다.서명 을 의뢰 하려 면 폼 에 숨겨 진 this 인 자 를 포함해 야 합 니 다.이 경우 의뢰 는 목표 대상 에 대한 인용 이 없 으 며, 의뢰 를 호출 할 때 목표 대상 을 제공 해 야 한다.
의뢰 가 정적 방법 을 표시 할 때, 의뢰 는 이 방법의 입구 점 에 대한 인용 을 저장 합 니 다.의뢰 가 첫 번 째 매개 변 수 를 통 해 닫 는 정적 방법 을 표시 할 때 이 방법 입구 점 에 대한 참조 와 대상 (이 대상 이 방법 첫 번 째 매개 변수 에 할당 할 수 있 는 유형) 에 대한 인용 을 저장 합 니 다.이 의뢰 를 호출 할 때 정적 방법의 첫 번 째 매개 변 수 는 대상 을 받 습 니 다.
의뢰 의 호출 목록 은 정렬 된 의뢰 집합 입 니 다. 그 중에서 목록 의 모든 요 소 는 이 의뢰 가 표시 하 는 방법 을 잘 호출 합 니 다.호출 목록 은 중복 되 는 방법 을 포함 할 수 있 습 니 다.호출 기간 에 호출 목록 에 나타 나 는 순서대로 호출 합 니 다.호출 목록 의 모든 방법 을 호출 하려 고 의뢰 하 였 으 며, 중복 방법 은 호출 목록 에 한 번 나타 나 면 한 번 호출 합 니 다.의뢰 는 가 변 적 이지 않다;만 들 면 의뢰 한 호출 목록 을 변경 할 수 없습니다.
의뢰 는 다 중 방송 의뢰 또는 조합 의뢰 라 고 불 린 다. 의뢰 는 한 가지 또는 여러 가지 방법 을 호출 할 수 있 고 조합 작업 에 사용 할 수 있 기 때문이다.
병합 작업 (예 를 들 어 Combine 과 Remove) 은 기 존 의뢰 를 바 꾸 지 않 습 니 다.반면, 이러한 작업 은 작업 결과, 변경 되 지 않 은 의뢰 또는 빈 인용 (Visual Basic 에서 Nothing) 을 포함 하 는 새로운 의뢰 를 되 돌려 줍 니 다.병합 작업 의 결과 가 어떠한 방법의 의뢰 도 인용 하지 않 았 을 때 이 작업 은 빈 인용 으로 되 돌아 갑 니 다 (Visual Basic 에서 Nothing).요청 한 작업 이 잘못 되 었 을 때, 병합 작업 은 변경 되 지 않 은 의뢰 를 되 돌려 줍 니 다.
호출 된 방법 이 이상 을 일 으 키 면 방법 은 실행 을 중단 하고 이상 을 의뢰 한 호출 자 에 게 전달 하 며 호출 목록 의 나머지 방법 을 호출 하지 않 습 니 다.호출 자의 이상 을 포착 하 는 것 은 이 행 위 를 바 꾸 지 않 습 니 다.
호출 된 방법의 서명 이 반환 값 을 포함 할 때 호출 목록 의 마지막 요소 의 반환 값 을 되 돌려 줍 니 다.서명 이 전 달 된 매개 변 수 를 포함 할 때 이 매개 변수의 최종 값 은 목록 의 모든 방법 을 호출 한 결과 입 니 다. 이 방법 들 은 순서대로 실행 되 고 매개 변수의 값 을 업데이트 합 니 다.
컴 파일 러 는 의뢰 에 두 가지 다른 방법 을 제공 합 니 다: BeginInvoke 와 EndInvoke.이러한 방법 에 대한 더 많은 정 보 는 '비동기 방식 으로 동기 화 방법 을 호출 하 는 것' 을 참조 하 시기 바 랍 니 다.
C 나 C + + 에서 의뢰 와 가장 비슷 한 것 은 함수 포인터 입 니 다.의뢰 는 정적 방법 이나 실례 방법 을 나 타 낼 수 있다.의뢰 가 인 스 턴 스 방법 을 표시 할 때 의뢰 는 방법 입구 점 에 대한 인용 뿐만 아니 라 클래스 인 스 턴 스 에 대한 인용 도 저장 합 니 다.함수 포인터 와 달리 의뢰 는 대상 과 유형 을 대상 으로 안전 합 니 다.
using System;
public class SamplesDelegate {
// Declares a delegate for a method that takes in an int and returns a String.
public delegate String myMethodDelegate( int myInt );
// Defines some methods to which the delegate can point.
public class mySampleClass {
// Defines an instance method.
public String myStringMethod ( int myInt ) {
if ( myInt > 0 )
return( "positive" );
if ( myInt < 0 )
return( "negative" );
return ( "zero" );
}
// Defines a static method.
public static String mySignMethod ( int myInt ) {
if ( myInt > 0 )
return( "+" );
if ( myInt < 0 )
return( "-" );
return ( "" );
}
}
public static void Main() {
// Creates one delegate for each method.
mySampleClass mySC = new mySampleClass();
myMethodDelegate myD1 = new myMethodDelegate( mySC.myStringMethod );
myMethodDelegate myD2 = new myMethodDelegate( mySampleClass.mySignMethod );
// Invokes the delegates.
Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", 5, myD1( 5 ), myD2( 5 ) );
Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", -3, myD1( -3 ), myD2( -3 ) );
Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", 0, myD1( 0 ), myD2( 0 ) );
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Access Request, Session and Application in Struts2If we want to use request, Session and application in JSP, what should we do? We can obtain Map type objects such as Req...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.