Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中缺少ctor约束的基本原理#_C# - Fatal编程技术网

C# C语言中缺少ctor约束的基本原理#

C# C语言中缺少ctor约束的基本原理#,c#,C#,我想知道,类型化构造函数缺少泛型类类型约束的原因是什么?例如 public class MyClass<T> where T : new(int) { public T Create(int i) { return new T(i); } } 公共类MyClass 其中T:new(int) { 公共T创建(int i) { 返回新的T(i); } } 尽管事实上,这可能很容易(尽管我觉得很难看)被(lambda-ctor)绕过,但我

我想知道,类型化构造函数缺少泛型类类型约束的原因是什么?例如

public class MyClass<T>
    where T : new(int)
{
    public T Create(int i)
    {
        return new T(i);
    }
}
公共类MyClass
其中T:new(int)
{
公共T创建(int i)
{
返回新的T(i);
}
}
尽管事实上,这可能很容易(尽管我觉得很难看)被(lambda-ctor)绕过,但我无法想象任何情况下,这个约束可能会导致任何实际的麻烦或歧义


请注意,这是一个语言结构问题,而不是一个特定的问题。

我搜索了一下,找到了答案。但由于它是在这里,所以我不想复制它,我只会张贴一个链接。这是埃里克·利珀特的回答。我希望他的回答对你有意义


这是一个有点长的问题,但你可以跳过它,只阅读链接答案。

@ken2k没有关于为什么没有这样的限制的实际答案。我不是在问是否有,或者如何克服它们的不足。我在问,为什么C#的设计是这样的,以至于没有。下次你上公共汽车时,看看你身后。Jon Skeet将带着一张带有答案的便利贴出现在那里……你们很多人都需要看看@Spook,它在下面的评论中被解释为被接受的答案。@Spook“我在问,为什么C#设计成这样,没有”->谁知道呢?答案纯粹是猜测。最有可能的是,该功能没有足够的实用性来实现。但这只是一个猜测。好吧,这就是我搜索的答案:在IL中没有标准的方法来描述“调用接受int的构造函数”。我们要么向IL添加一个新概念,要么生成代码,以便泛型构造函数调用使用反射。这对我来说很公平。谢谢