15: public decimal Overdraft { get; set; }
16:
17: public CreditCard(int length, int width, int thickness)
18: : base(length, width, thickness)
19: {
20: }
21: }
通过上面的代码可以看出,在创建派生自WalletThingBase类的所有类的时候,都会先检验其尺寸是否超标,如果是尺寸过大就不允许创建,也就表示你不能把它放进你的钱包。显然,银行卡尽管规格各异,但都是可以的。
接下来,我们就要来设计钱包这个类了。我们可以借助List<T>来简化我们的设计工作,最需要注意的其实就是严格把关,凡是非WallThingBase派生类都不允许进入,另外,还得简单提供一些放东西和取东西的函数,这样,一个基本的钱包就设计出来了。
1: public class Wallet<T> : CollectionBase
2: {
3: public Wallet()
4: {
5: Type baseType = typeof(T).BaseType;
6:
7: while (baseType != null
8: && baseType != typeof(Object)
9: && baseType.BaseType != typeof(Object))
10: {
11: baseType = baseType.BaseType;
12: }
13:
14: if (baseType != typeof(WalletThingBase))
15: {
16: throw new Exception(typeof(T).ToString() + " cannot be put into wallet.");
17: }
18: }
19:
20: public T this[int index]
21: {
22: get { return (T)List[index]; }
23: set { List[index] = value; }
24: }
25:
26: public int Add(T item)
27: {
28: return List.Add(item);
29: }
30:
31: public void Remove(T item)
32: {
33: List.Remove(item);
34: }
35: }
泛型是一种很具有亲和力的语言特性,很容易让人接受也很容易让人喜欢上它,借助泛型的便利,尽情享受C#开发乐趣吧!