自定義集合型別

2021-09-03 06:03:12 字數 2168 閱讀 5888

很多時候我們去自定義一些型別,更有些時候我們會把這些自定義型別封裝成集合,比如說現在有乙個自定義型別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...