2009-12-10 1 views
10

대리인을 만들 필요없이 아래 코드에서 동일한 기능을 유지할 수있는 방법이 있습니까? 여러 가지 다양한 DeleteSomethingX (ref IntPtr ptr) 메서드가 포함 된 타사 API를 사용하고 있으며 IntPtr.Zero 검사 코드를 중앙 집중화하려고합니다.참조 매개 변수가있는 대리자

private void delegate CleanupDelegate(ref IntPtr ptr); 

... 

private void Cleanup(ref IntPtr ptr, CleanupDelegate cleanup) 
{ 
    if (ptr != IntPtr.Zero) 
    { 
     cleanup(ref ptr); 
    } 
} 
+2

정확히 무엇을하려고합니까? –

+1

델리게이트 생성에있어 문제점은 무엇입니까? – SLaks

+0

타사 API가 널 포인터를 NOP로 처리하지 않습니까? –

답변

10

위임 유형을 선언하지 않은 상태라면 의미가 없을 수도 있습니다. 아주 적은 수의 (만약있는 경우) inbuilt delegates가 ref; 하지만 당신은 일반 만들 수 있습니다 :

delegate void ActionRef<T>(ref T value); 

나는 이것도 많이 절약 모르겠다. 있을 수 있습니다 또한 여기에 확장 방법과 트릭을 수 있지만 더 자세한 내용 없이는 말하기 어렵습니다.