【问题标题】:Why can't i specify constructor restrictions for type parameters besides : new() [duplicate]为什么我不能为类型参数指定构造函数限制:new() [重复]
【发布时间】:2013-09-25 20:20:26
【问题描述】:

我正在尝试创建一个接口'Something<T> 并希望限制T 拥有一个带有一个 int 参数的构造函数。我可以做类似where : new() 的事情。那么为什么我不能做到where T : new(int)

【问题讨论】:

  • 因为该功能没有实现
  • 因为那不是很通用?你会在什么时候停下来?这个功能意义不大。
  • @SriramSakthivel:该功能不仅没有实现,甚至还没有被指定。也就是说,事实上,该功能不存在,除非作为一种想法。
  • 我想知道是否有任何原因使其无法实施。我不是在讨论它是否足够通用。

标签: c#


【解决方案1】:

您可以通过将 T 的实例化推迟给用户来绕过这一点。比如:

class MyTCreator<TParam, T>
{
    private Func<TParam, T> generator;
    public MyTCreator(Func<TParam, T> generator)
    {
        this.generator=generator;
    }
    public T CreateT(TParam param)
    {
        return generator(param);
    }
}

并像这样使用您的课程:

var creator = new MyTCreator<long, DateTime>(ticks => new DateTime(ticks));
DateTime dt = creator.CreateT(12345L);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    相关资源
    最近更新 更多