ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

可以将通用类型限制为接口new()吗?

2019-10-29 09:07:25  阅读:153  来源: 互联网

标签:constructor constraints interface generics c


我正在尝试创建一个简单的对象回收类

public class ObjectPool<T> where T : class, IRecyclable, new()
{
}

我希望能够在我的界面上使用它:

public interface ISomeInterface : IRecyclable
{
}

ObjectPool<ISomeInterface> pool = new ObjectPool<ISomeInterface>();

但这会产生错误:

error CS0310: The type `ISomeInterface' must have a public parameterless constructor in order to use it as parameter `T' in the generic type or method `ObjectPool<T>'

根据我在网上阅读的内容,我知道我无法在接口中指定构造函数.

我读到您可以使用反射代替“新”来创建新实例,尽管我担心执行此实例化的速度.

解决这种情况的正确方法是什么?有没有我完全忽略的更简单的解决方案?

解决方法:

接口只能实现其他接口.

interface IA : IB, IC
{
    ...
}

解决难题的一种好方法是引入工厂界面.

interface IThing
{
    ...
}

interface IThingFactory
{
    IThing Create();
}

现在,任何想要创建事物的能力的人都应该为此目的获得一个IThingFactory.

如果您需要工厂的一般概念,则可以使用以下方法:

interface IFactory<T>
{
    T Create();
}

class ObjectPool<T, F>
    where T : IRecyclable        
    where F : IFactory<T>
{
    public ObjectPool(F factory)
    {
        ...
    }
}

标签:constructor,constraints,interface,generics,c
来源: https://codeday.me/bug/20191029/1958714.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有