【发布时间】:2016-10-21 19:19:04
【问题描述】:
我在尝试在其中创建一个抽象类和一个本质上是通用的方法时遇到了麻烦。
class GameRoomManager : MonoBehaviour {
public GameRoom GetSomething(string s){
//do things here
return GameRoomvar;
}
}
现在我有另一个类做类似的事情,但涉及不同的类
class PlayerManager : MonoBehaviour{
public Player GetSomething(string s){
//player related things here
return Playervar;
}
}
我想让 GameRoomManager 和 PlayerManager 类都继承自抽象类 Abs
class GameRoomManager : Abs{
public override GameRoom GetSomething<GameRoom>(string s){
return GameRoomvar;
}
}
在哪里
public abstract class Abs{
public T GetSomething<T>(string s);
}
我在寻找解决方案时看到了一些关于这个主题的答案,并且都建议抽象类本身是通用的。我不想让抽象类通用,因为我看到的例子会让我做class GameRoomManager : Abs<GameRoomManager>。但我希望该方法返回 GameRoom 类型,而不是 GameRoomManager。
我对泛型并不完全熟悉,所以如果我出错了,请指出正确的方向
【问题讨论】:
-
But I want the method to return type PQR, not XYZ然后将PQR设为通用参数。为什么泛型参数必须是类型本身? -
是的,我已经考虑过了。但是这个例子只适用于一种返回 T 的方法。现在如果我有另一种返回 U 类型的方法呢?我必须制作
GG<T, U>,这对我来说似乎很愚蠢。就此而言,还不如根本不创建抽象类。还是有其他原因,或者有更好的解释为什么我应该按照你说的方式做以及如何做? -
如果你不需要抽象类,那么就不要创建抽象类。鉴于它没有实现的方法,它确实应该是一个接口,而不是一个抽象类,但即便如此,如果你不需要接口,也不要创建一个。如果您需要,请使用它。
-
是的,这是有道理的。至于类型参数,我猜没有其他方法可以拥有
<T,U>? -
示例代码太模糊,无法理解您在这里真正想要完成的工作。不知道是XY问题还是什么。以这种方式使用泛型对我来说毫无意义。您所完成的只是拥有两个类,它们的方法名称相同,但行为不同。如果 HIJ 和 PQR 继承自一个共同的基础,那么它会更有意义。但是你也不需要那里的泛型。
标签: c# generics abstraction