我在MSDN网站上看到c#templates(泛型)与c ++中的不同。我有两个不同的对象,它们具有组件转换,可以以某种方式用“对象”而不是特定组件来提供它吗?
我想像下面那样进行调用,因为两个对象都有变换组件。
collisionCheck(Me, this)
否则我也可以这样做:
collisionCheck(Me.transform, this.transform)
但我想尽可能地隐藏在前端。 (下面的示例是没有馈送变换组件)
public void collisionCheck(object enemy, object me){
if(me.transform.x < enemy.transform.x)
print("foo");
}
如果您有任何提示,那就太好了!
答案 0 :(得分:3)
你可能需要继承而不是泛型。
public interface IPositioned
{
float X { get; }
float Y { get; }
}
public class Me: IPositioned { /* ... */ }
public class Enemy: IPositioned { /* ... */ }
/* ... */
public void CollisionCheck(IPositioned me, IPositioned enemy)
{
if (me.X < enemy.X)
{
Console.Write("foo");
}
}
答案 1 :(得分:0)
你可以选择这样的东西。但我同意您可能希望在基类上使用CollisionCheck实现并使用继承。
public class Transform
{
public float X { get; set; }
public float Y { get; set; }
}
public interface IHasTransform
{
Transform SomeTransform { get; set; }
}
public class You : IHasTransform
{
public Transform SomeTransform { get; set; }
}
public class Me : IHasTransform
{
public Transform SomeTransform { get; set; }
public void CollisionCheck<T>(T other) where T : IHasTransform
{
if (this.SomeTransform.X < other.SomeTransform.X)
Console.WriteLine("foo");
}
}