C#快速實(shí)現(xiàn)IList非泛型類接口的自定義類作為數(shù)據(jù)源
使用可以綁定數(shù)據(jù)源的控件我們需要有實(shí)現(xiàn)了IList接口的類作為數(shù)據(jù)源,我們有很多的方法,比如使用ArrayList或者List的泛型類都是很方便的,或者不怕麻煩的索性直接上DataTable。
但我們也許想實(shí)現(xiàn)一個專用于某個自己定義的對象的list類,這樣其他類想錯誤的加入這個list都不可能了。
一、利用VS的修補(bǔ)程序快速繼承IList
假定我有一個Creature的類,如果我們直接在上面加上接口的繼承,則會出現(xiàn)報錯提示,如下圖:
說明,這些接口成員都是必須實(shí)現(xiàn)的。
我們來一一實(shí)現(xiàn),其實(shí)也不必要,因為我們只是借用它的接口讓Creature類成為一個可以充當(dāng)數(shù)據(jù)源DataSource的類。
我們點(diǎn)擊最下面的顯示可能的修補(bǔ)程序(Alt+Enter即可),然后點(diǎn)預(yù)覽,可以根據(jù)自己的需要修改。
如果不需要特別的修改,基本直接應(yīng)用即可,只是不能應(yīng)用到數(shù)據(jù)源綁定上。表面上看這樣這個類就實(shí)現(xiàn)了IList接口了,但要用于數(shù)據(jù)源綁定就必須實(shí)現(xiàn)我所列出的5個成員,否則還是不能做為數(shù)據(jù)源給控件使用。
二、實(shí)現(xiàn)必須的成員
#region 做數(shù)據(jù)綁定必須實(shí)現(xiàn)的成員 /// <summary> /// 添加元素必須的方法 /// </summary> /// <param name="value"></param> /// <returns></returns> /// <exception cref="NotImplementedException"></exception> public int Add(object? value) { list.Add(value); return list.Count; //throw new NotImplementedException(); } public int Count { get { return list.Count; } } public object? this[int index] { get { return list[index]; } set { list[index] = value; } } /// <summary> /// 如果要作為DataGridView的數(shù)據(jù)源,必須實(shí)現(xiàn)這個屬性 /// </summary> public bool IsReadOnly { get { return false;} } /// <summary> /// 迭代必須的方法 /// </summary> /// <returns></returns> /// <exception cref="NotImplementedException"></exception> public IEnumerator GetEnumerator() { return list.GetEnumerator(); //throw new NotImplementedException(); } #endregion
我們來看看效果:
這里我們測試了三種綁定數(shù)據(jù)源的控件,分別是ListBox,ComboBox,DataGridView ,沒有發(fā)現(xiàn)任何問題,是不是特別的容易!
到此這篇關(guān)于C#快速實(shí)現(xiàn)IList非泛型類接口的自定義類作為數(shù)據(jù)源的文章就介紹到這了,更多相關(guān)C# IList數(shù)據(jù)源內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
unity shader實(shí)現(xiàn)較完整光照效果
這篇文章主要為大家詳細(xì)介紹了unity shader實(shí)現(xiàn)較完整光照效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11C#如何控制IIS動態(tài)添加刪除網(wǎng)站詳解
這篇文章主要給大家介紹了關(guān)于C#如何控制IIS動態(tài)添加刪除網(wǎng)站的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11C#實(shí)現(xiàn)將32位MD5摘要串轉(zhuǎn)換為128位二進(jìn)制字符串的方法
這篇文章主要介紹了C#實(shí)現(xiàn)將32位MD5摘要串轉(zhuǎn)換為128位二進(jìn)制字符串的方法,涉及C#字符串遍歷、加密與轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2017-04-04C#中Request.Cookies 和 Response.Cookies 的區(qū)別分析
本文通過實(shí)例代碼向我們展示了C#中Request.Cookies 和 Response.Cookies 的區(qū)別,文章淺顯易懂,這里推薦給大家。2014-11-11C#實(shí)現(xiàn)對字符串中特定詞出現(xiàn)次數(shù)的計數(shù)過程
LINQ(Language-Integrated Query)是C#和VB.NET中強(qiáng)大的查詢語言,它可以用來查詢集合、SQL數(shù)據(jù)庫、XML文檔等,在C#中,我們可以使用LINQ來簡化對字符串中特定單詞出現(xiàn)次數(shù)的計數(shù)過程,需要的朋友可以參考下2024-08-08