2 に答える
1
C# 4 では、B が A から継承されIEnumerable<B>
ている場合に変換できます。は T と共変であるため可能です (ただし、Tとは反変です)。List<> の代わりに IEnumerable<> を使用できるかもしれませんIEnumerable<A>
IEnumerable<T>
List<T>
于 2013-07-12T16:49:51.653 に答える
0
AList<BallisticProjectile>
は として使用できませんList<Projectile>
。理由を簡単に確認するには、 a に a を追加できますが、 anew Projectile()
に a を追加しList<Projectile>
ても意味がありませんList<BallisticProjectile>
。
このアプローチにより、発射体のタイプを一般的な方法で設定でき、問題を解決できる可能性があります(pswgが提案したのと同じ):
public class ProjectileList<T> where T : Projectile
{
List<T> Projectiles;
}
更新:あなたの場合、それは次のようになります:
public abstract class Weapon<T> : MonoBehaviour where T : Projectile {
public virtual IList<T> Projectiles { get; set; }
}
その後:
public class Crossbow : Weapon<BallisticProjectile> {
// if you needed to override the implementation, you'd start with this:
// public override IList<BallisticProjectile> Projectiles { get { } set { } }
}
ここでの問題は、C# ではオーバーライド時にプロパティ (または他のメンバー) の型を変更できないことです。型が何らかの形で互換性があるかどうかは問題ではなく、同じ型で宣言する必要があります。このように、ジェネリックは、仮想プロパティを に変更する方法BallisticProperty
です。
于 2013-07-12T17:20:06.950 に答える