将通用接口参数类型转换为通用类类型

时间:2018-07-29 14:46:00

标签: c# generics unity3d mono

我正在尝试学习泛型,接口和多态性。

我正在创建一个对象池,我希望这些对象符合通用接口,以便我可以告诉它们返回各自的池。

我已经创建了接受通用类型和通用类的通用接口。

public interface IWidgetPoolObject<T> {
    void ReturnToPool();
    void SetPool(T pool);
}


public class WidgetPool<T> : MonoBehaviour where T : MonoBehaviour {
    private List<T> m_poolList;

    public T GetObject() {
        //..
    }

    public void PoolObject(T pooledObject) {
        //..
    }
}

在下面的示例中,在接口方法SetPool(T pool)内,我试图设置类池。但是我遇到了无法强制输入错误的问题。

我认识到SomeClass的私有成员var是WidgetPool<SomeClass>类型,而 SetPool 只是传入了SomeClass类型。但是,当我尝试投射m_Pool = (WidgetPool<SomeClass>) pool;时也不起作用。

public class SomeClass : MonoBehaviour, IWidgetPoolObject<SomeClass> {

    private WidgetPool<SomeClass> m_Pool;

    public void ReturnToPool() {
        m_Pool.PoolObject(this);
    }

    public void SetPool(SomeClass pool) {
        m_Pool = pool; //THIS LINE
    }
}

我还不了解如何正确搜索问题所在。有帮助吗?

1 个答案:

答案 0 :(得分:2)

Pool的类型为SomeClass,而m_Pool的类型为WidgetPool ...您不能强制转换完全不同的类型,因为无法将整数强制转换为数组...运行。也许您想要做的是像这样创建一个新的WidgetPoolSomeClass

m_Pool= new WidgetPool<SomeClass>();
m_Pool.SetPool(pool);

...会起作用...取决于您要做什么...