0

MSDN サイトで、c# テンプレート (ジェネリック) が c++ と同じではないことを読みました。コンポーネント変換を持つ 2 つの異なるオブジェクトがありますが、特定のコンポーネントの代わりに「オブジェクト」を使用して何らかの方法でフィードすることは可能ですか?

両方のオブジェクトに変換コンポーネントがあるため、以下のような呼び出しを行いたいと思います。

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 に答える