[英]C# Generics with Lists
我有這兩個類的多個版本:
public class Contests : List<Contest> { }
public class Contest {
// stuff specific to Contest;
public Contests parent;
public void Attach() {
parent.Add(this);
}
}
這是另一個:
public class Transactions : List<Transaction> { }
public class Transaction {
// stuff specific to Transaction;
public Transactions parent;
public void Attach() {
parent.Add(this);
}
}
為了不重復代碼,我可以使用泛型將 Attach 取出到基類中嗎?
public class MBData<T> {
public T parent;
public void Attach() {
T.Add(this);
}
}
我試着用下面的,但我收到有關不能夠轉換之間的誤差Contests
和MBDatas<MBData<Contests>>
。
public class MBDatas<S> : List<S> { }
public class MBData<B> where B : MBDatas<MBData<B>> { }
public class Contests : MBDatas<Contest> { }
public class Contest : MBData<Contests> { }
這對你有用嗎?
public abstract class MBData<P, C>
where P : MBDatas<P, C>
where C : MBData<P, C>
{
public void Attach()
{
this.Parent.Add((C)(object)this);
}
public P Parent { get; set; }
}
public abstract class MBDatas<P, C> : List<C>
where P : MBDatas<P, C>
where C : MBData<P, C>
{ }
你被迫做一個討厭的雙重轉換(C)(object)this
來讓Attach
方法工作,這是這種方法的唯一問題。 它有效,但您需要注意正確定義子類。
你可以這樣定義你的類:
public class Contests : MBDatas<Contests, Contest> { }
public class Contest : MBData<Contests, Contest> { }
public class Transactions : MBDatas<Transactions, Transaction> { }
public class Transaction : MBData<Transactions, Transaction> { }
最后,像這樣使用它們:
var cs = new Contests();
var c1 = new Contest() { Parent = cs };
var c2 = new Contest() { Parent = cs };
cs.Add(c1);
cs.Add(c2);
var ts = new Transactions();
var t1 = new Transaction() { Parent = ts };
var t2 = new Transaction() { Parent = ts };
ts.Add(t1);
ts.Add(t2);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.