为什么构造函数不支持泛型方法的类型推断?
public class MyType<T>
{
private readonly T field;
public MyType(T value) { field = value; }
}
var obj = new MyType(42); // why can't type inference work out that I want a MyType<int>?
虽然你可以用一个工厂类来解决这个问题,
public class MyTypeFactory
{
public static MyType<T> Create<T>(T value)
{
return new MyType<T>(value);
}
}
var myObj = MyTypeFactory.Create(42);
构造器不支持类型推断有没有实际或哲学上的原因?
发布于 2010-08-26 05:04:13
public class MyType<T>
{
private readonly T field;
public MyType(T value) { field = value; }
}
他们可以,没有必要再次告诉构造函数‘T是什么’,因为你已经在类解密中这样做了。
您的工厂也是不正确的,除非您在MyType
类中声明了工厂,否则您需要有public class MyTypeFactory<T>
而不仅仅是public class MyTypeFactory
编辑以进行更新:
那么,42是长的,短的,整型的,还是别的什么?
假设您有以下内容
class Base
{
public virtual void DoStuff() { Console.WriteLine("Base"); }
}
class Foo : Base
{
public override void DoStuff() { Console.WriteLine("Foo"); }
}
然后你做了这个
var c = new Foo();
var myType = new MyType(c);
您希望使用foo
还是base
?我们需要告诉编译器用什么来代替T
当您真的想输入base
时
因此,
var myType = new MyType<Base>(c);
发布于 2010-08-26 05:09:36
构造函数需要与类本身具有相同的通用规范。否则,就不可能知道示例中的int
是与类相关还是与构造函数相关。
var obj = new MyType<int>(42);
是具有构造函数MyType(int)
的MyType<T>
类还是具有构造函数MyType<T>(T)
的MyType
类
https://stackoverflow.com/questions/3570167
复制相似问题