首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么C#构造函数不能推断类型?

为什么C#构造函数不能推断类型?
EN

Stack Overflow用户
提问于 2010-08-26 05:02:24
回答 2查看 25.1K关注 0票数 173

为什么构造函数不支持泛型方法的类型推断?

代码语言:javascript
复制
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>?

虽然你可以用一个工厂类来解决这个问题,

代码语言:javascript
复制
public class MyTypeFactory
{
   public static MyType<T> Create<T>(T value)
   {
      return new MyType<T>(value);
   }
}
var myObj = MyTypeFactory.Create(42);

构造器不支持类型推断有没有实际或哲学上的原因?

EN

回答 2

Stack Overflow用户

发布于 2010-08-26 05:04:13

代码语言:javascript
复制
public class MyType<T> 
{ 
   private readonly T field; 
   public MyType(T value) { field = value; } 
} 

他们可以,没有必要再次告诉构造函数‘T是什么’,因为你已经在类解密中这样做了。

您的工厂也是不正确的,除非您在MyType类中声明了工厂,否则您需要有public class MyTypeFactory<T>而不仅仅是public class MyTypeFactory

编辑以进行更新:

那么,42是长的,短的,整型的,还是别的什么?

假设您有以下内容

代码语言:javascript
复制
class Base
{
   public virtual void DoStuff() { Console.WriteLine("Base"); }
}

class Foo : Base
{
   public override void DoStuff() { Console.WriteLine("Foo");  }
}

然后你做了这个

代码语言:javascript
复制
var c = new Foo();

var myType = new MyType(c);

您希望使用foo还是base?我们需要告诉编译器用什么来代替T

当您真的想输入base

因此,

代码语言:javascript
复制
var myType = new MyType<Base>(c);
票数 17
EN

Stack Overflow用户

发布于 2010-08-26 05:09:36

构造函数需要与类本身具有相同的通用规范。否则,就不可能知道示例中的int是与类相关还是与构造函数相关。

代码语言:javascript
复制
var obj = new MyType<int>(42);

是具有构造函数MyType(int)MyType<T>类还是具有构造函数MyType<T>(T)MyType

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3570167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档