2013-07-25 77 views
0

我讀過MSDN網站上的c#模板(泛型)與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"); 
} 

如果您有任何提示,它會很好!

回答

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"); 
    } 
} 
+0

現貨上。 +1 ... – spender

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