我正在尝试学习泛型,接口和多态性。
我正在创建一个对象池,我希望这些对象符合通用接口,以便我可以告诉它们返回各自的池。
我已经创建了接受通用类型和通用类的通用接口。
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
}
}
我还不了解如何正确搜索问题所在。有帮助吗?
答案 0 :(得分:2)
Pool的类型为SomeClass
,而m_Pool的类型为WidgetPool
...您不能强制转换完全不同的类型,因为无法将整数强制转换为数组...运行。也许您想要做的是像这样创建一个新的WidgetPool
类SomeClass
:
m_Pool= new WidgetPool<SomeClass>();
m_Pool.SetPool(pool);
...会起作用...取决于您要做什么...