代码语法解释帮助

时间:2011-08-18 16:18:59

标签: c#

我正在学习WPF并且有一段代码我不太明白用约束声明的方法:

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

我知道这是一个共享方法而且T是一个类,但是什么是'static 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;
    }
}

4 个答案:

答案 0 :(得分:1)

T是一个类型的占位符 - 即所谓的泛型。 where子句是一个通用约束,需要引用类型。

答案 1 :(得分:1)

希望我理解你的问题。

这是公共静态功能的声明。

如果不是你要求的,请更好地解释。

答案 2 :(得分:1)

前面的static关键字意味着您无需实例化VisualTreeHelperExtensions即可调用FindAncestor方法。你可以说:

VisualTreeHelperExtensions.FindAncestor<MyClass>(myObj);

myObjDependencyObject的位置。正如您所说,where确保T(在这种情况下为MyClass)确实是一个类

为方便起见,像这样的方法可以这样声明:

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

这将允许您像这样调用方法:

myObj.FindAncestor<MyClass>();

事后有效地向DependencyObject添加方法。

答案 3 :(得分:1)

这意味着它是一个静态方法(您可以在没有创建类的实例的情况下调用它)返回类型为T的对象。FindAncestor是方法的名称。