2011-08-18 64 views
0

我學習WPF和有一段代碼,我不太明白與約束聲明的方法:代碼語法的解釋幫助

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關鍵字表示您不必實例化VisualTreeHelperExtensions以調用FindAncestor方法。你可以說:

VisualTreeHelperExtensions.FindAncestor<MyClass>(myObj); 

myObjDependencyObject。該where,如你所說,可以確保TMyClass在這種情況下)確實是一類

爲了方便,這樣的方法可以聲明如下:

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

這將允許你打電話像這樣的方法:

myObj.FindAncestor<MyClass>(); 

有效地添加一個方法你DependencyObject事後。

+0

感謝您的全面解釋。 – k80sg

1

T是一個類型的佔位符 - 所謂的通用。 where子句是一個需要引用類型的通用約束。

1

希望我明白你的問題。

這是一個公共靜態函數的聲明。

如果不是你要求的,請更好地解釋。

1

這意味着它是一個靜態方法(您可以在沒有創建類的實例的情況下調用它)返回類型爲T的對象。FindAncestor是方法的名稱。