我有两个方法,FollowForce() 和 AvoidForce(),它们被重载以接受 NavObject 或 GameObject。有没有办法简化 Follow() 函数以接受这两种类型?
public void Follow(NavObject target){
if(isFollowing){Body.AddForce(FollowForce(target));}
if(isAvoiding){Body.AddForce(AvoidForce(target));}
}
public void Follow(GameObject target){
if(isFollowing){Body.AddForce(FollowForce(target));}
if(isAvoiding){Body.AddForce(AvoidForce(target));}
}
我尝试了以下方法,但得到了无法将“T”表达式转换为类型“NavObject”
:
public void Follow <T>(T target){
if(isFollowing){Body.AddForce(FollowForce(target));}
if(isAvoiding){Body.AddForce(AvoidForce(target));}
}
最佳答案
可能,您甚至不需要为此使用泛型。您还可以为您的 NavObject
和 GameObject
创建一个接口(interface)来实现,其中包含您的 FollowForce
和 AddForce
方法。
public void Follow(IHaveForce target)
{
if (isFollowing)
{
Body.AddForce(FollowForce(target));
}
if (isAvoiding)
{
Body.AddForce(AvoidForce(target));
}
}
然后你的其他方法需要这样设置:
public Force FollowForce(IHaveForce target)
{
// Do your work...
}
public Force AvoidForce(IHaveForce target)
{
// Do your work...
}
您需要使用泛型的唯一原因是,如果您希望始终强制使用相同的类型。在您提供的最小场景中,这似乎不是您所需要的。如果无论如何你都想使用泛型,你也可以让你的泛型类型实现 IHaveForce
。
关于c# 重载方法的泛型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45599034/