0

我在 MSDN 网站上读到 c# 模板(泛型)与 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");
}

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

4

2 回答 2

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");
   }
}
于 2013-07-25T00:19:14.127 回答
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");
    }
}
于 2013-07-25T00:45:26.113 回答