2011-08-18 2 views
0

나는 WPF를 배우고 내가 상당히 제약 선언 방법을 이해하지 못하는 코드 조각있다 :이 공유 방법 이해코드 구문 explaination 도움

public static T FindAncestor<T>(DependencyObject dependencyObject) 
    where T : class // Need help to interpret this method declaration 

및 T 클래스 수있다는 하지만 정적 T FindAncestor는 무엇입니까? 그것을 전체적으로 해석하는 데 어려움이 있습니다. 감사!

코드 :

public static class VisualTreeHelperExtensions 
{ 
    public static T FindAncestor<T>(DependencyObject dependencyObject) 
     where T : class // Need help to interpret this method 
    { 
     DependencyObject target = dependencyObject; 
     do 
     { 
      target = VisualTreeHelper.GetParent(target); 
     } 
     while (target != null && !(target is T)); 
     return target as T; 
    } 
} 

답변

1

앞에있는 static 키워드는 FindAncestor 메서드를 호출하기 위해 VisualTreeHelperExtensions을 인스턴스화 할 필요가 없음을 의미합니다. 당신은 말할 수 있습니다 :

VisualTreeHelperExtensions.FindAncestor<MyClass>(myObj); 

경우 myObjDependencyObject이다.

public static T FindAncestor<T>(this DependencyObject dependencyObject) 
    where T : class // Need help to interpret this method declaration 

당신이 호출 할 수 것입니다 : 당신이 말한대로 where는 (이 경우 MyClass) T

는 편의를 위해이 같은 방법은 다음과 같이 선언 할 수있는 클래스가 참인지 확인한다 그래서 같은 방법

myObj.FindAncestor<MyClass>(); 

효과적으로 사실 후 DependencyObject에 메서드를 추가.

+0

종합적인 설명 주셔서 감사합니다. – k80sg

1

T이 유형에 대한 자리 표시 자입니다 - 일반으로 알려진이. where 절은 참조 형식이 필요한 제네릭 제약 조건입니다.

1

희망 사항.

public static function의 선언입니다.

요청하지 않는 경우 더 자세히 설명해주세요.

1

형식이 T 인 개체를 반환하는 정적 메서드 (만든 클래스 인스턴스없이 호출 할 수 있음)입니다. FindAncestor은 메서드 이름입니다.