C#Generic with function calls

时间:2013-07-25 00:08:18

标签: c# templates generics

我在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");
}

如果您有任何提示,那就太好了!

2 个答案:

答案 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");
    }
}