考虑以下静态泛型方法:
public class Foo
{
public static void Test<T>(T arg)
where T : FrameworkElement
{
}
}
我可以像下面这样简单地调用它,并且 T 将被暗示为Button
来自传入的参数:
var myButton = new Button();
Foo.Test(myButton);
但是,对于以下泛型类...
public class Laa<T>
where T : FrameworkElement
{
public Laa(T element)
{
}
}
此代码不会编译。
var myButton = new Button();
var laa = new Laa(myButton);
相反,我必须像这样显式地提供类型。
var myButton = new Button();
var laa = new Laa<Button>(myButton);
我认为T
提供的论点会暗示,但似乎并非如此。
我怀疑原因是因为没有类Laa
——该类实际上是——Laa<Button>
所以它不知道要构造什么,但这只是一个猜测。
即便如此,编译器是否没有足够的信息来解决这个问题?没有类Laa
,但有一个泛型Laa<T>
可以满足提供的参数。