很多時候我們去自定義一些型別,更有些時候我們會把這些自定義型別封裝成集合,比如說現在有乙個自定義型別user
///
/// 使用者
///
class user
///
/// 使用者名稱
///
public string username
///
/// 使用者這密碼
///
public string password
} 一般情況下,我們封裝集合時,是用泛型的list<>去封裝,比如
list<
user> users = new list();
如果從技術角度考慮,這樣的封裝沒有什麼問題,如果是從物件導向的角度考慮,現在的users不是純粹一組使用者,更準確的理解是把使用者放到了乙個list的集合中,list的很多方法,對於這組使用者來說是沒有業務含意的,如果我們想得到純粹的一組使用者,那就得定義乙個使用者組類了。定義如下:
///
/// 使用者組
///
class
users
在內部,還是用list來存放多個使用者,但這個集合是私有的,被users型別封裝了起來。現在的users就代表乙個使用者的集合了,當然,還要實現這個集合的新增使用者,刪除使用者,包括獲取使用者的總數,**如下:
///
/// 新增使用者
///
/// 使用者
public void adduser(user user)
///
/// 移除使用者
///
/// 使用者
public void removeuser(user user)
///
/// 獲得使用者數量
///
public int count
} 不但有新增,刪除使用者,還要對使用者組中的使用者進行修改和查詢,當然我們去構建方法是沒有問題的,
///
/// 修改使用者
///
/// 使用者
public void modifyuser(user user)
} }
///
/// 查詢使用者
///
/// 使用者id
///
public user queryuser(int id)
} return null; }
這樣可能實現修改和查詢,但有修改和查詢我們可以根據list集合的特點(主要是引用型別的特點)來達到修改和查詢,不防用索引器來試一下:
///
/// 使用者
///
/// 使用者id
///
public user this[int id]
} return null; }
set
} }
} 用索引器的好處是把使用者組物件當集合來使用,使用者id當索引值:
users users = new users();
user user = users[1];
users[0].username = "張三";
即然users代表乙個集合,那應該能對它進行遍歷,為了實現對users的foreach遍歷,必須實現ienumerable介面的實現,**如下:
class
users : ilistsource, ienumerable
} ……
} 在winform中或在asp.net中,框架中提供了一些資料庫的繫結控制,如果使我們的使用者組具有繫結能力,就更加完美了。
通常狀況下,為了繫結到控制項的datasource的屬性下,要實現以下介面,
ilist 介面,包括一維陣列。
ibindinglist 介面
我們來實現ilistsource介面,這個介面需要實現兩個成員,乙個是containslistcollection屬性,乙個是getlist方法
class users : ilistsource, ienumerable
} ///
/// 返回集合
///
///
public system.collections.ilist getlist()
…… }
下面是整體類圖:
自定義集合型別
很多時候我們去自定義一些型別,更有些時候我們會把這些自定義型別封裝成集合,比如說現在有乙個自定義型別user 使用者 class user 使用者名稱 public string username 使用者這密碼 public string password 一般情況下,我們封裝集合時,是用泛型的li...
自定義集合型別(續)
其實我們組合c 的一些知識,來實現這個功能 首先定義乙個委託 delegate bool fun user user 這個委託是接收乙個user型別的引數,以乙個bool型別作為返回值。再次在users集合類中定義乙個查詢方法 public user first fun predicate retu...
自定義集合型別(續)
其實我們組合c 的一些知識,來實現這個功能 首先定義乙個委託 delegate bool fun user user 這個委託是接收乙個user型別的引數,以乙個bool型別作為返回值。再次在users集合類中定義乙個查詢方法 public user first fun predicate retu...