Re: [問題] class中存取陣列元素的寫法

看板C_Sharp (C#)作者 (冷羽憶塵)時間14年前 (2011/08/13 15:44), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串6/6 (看更多)
在下也提供一個方法,不過挺複雜的^^".. 不一定實用,看看就好... 目的: interface IIndexer<T> { T this[int index] { get; set; } } interface IMultList { IIndexer<T> Item<T>(); } class MultList : IMultList { public MultList(List<int> intList, List<float> floatList) {...} ... (其它實作) } 使用方法: 實作IMultList類別物件.Item<List的元素型別>()[索引] 使用例子: List<int> intlst = new List<int>(); intlst.Add(1); intlst.Add(2); intlst.Add(3); List<float> floatlst = new List<float>(); floatlst.Add(1.1f); floatlst.Add(1.2f); floatlst.Add(1.3f); StringBuilder sb = new StringBuilder(); IMultList m = new MultList(intlst, floatlst); for (int i = 0; i < 3; i++) { string s1 = m.Item<int>()[i].ToString(); string s2 = m.Item<float>()[i].ToString(); sb.AppendLine(i + ": " + s1 + ", " + s2); } MessageBox.Show(sb.ToString()); MultList的實作: class MultList : IMultList { internal List<int> _intList; internal List<float> _floatList; private _Indexers lstOp; // List Operator public MultList(List<int> intList, List<float> floatList) { lstOp = new _Indexers(this); _intList = intList; _floatList = floatList; } public IIndexer<T> Item<T>() { return new Indexer<T>( (_IIndexer<T>)lstOp ); } private interface _IIndexer<T> { void get(int index, out T _return); void set(int index, T value); } private class Indexer<T> : IIndexer<T> { private _IIndexer<T> _obj; public Indexer(_IIndexer<T> obj) { _obj = obj; } public T this[int index] { get { T tmp; _obj.get(index, out tmp); return tmp; } set { _obj.set(index, value); } } } private class _Indexers : _IIndexer<int>, _IIndexer<float> { private MultList _rf; public _Indexers(MultList rf) { _rf = rf; } public void get(int index, out int _return) { _return = _rf._intList[index]; } public void set(int index, int value) { _rf._intList[index] = value; } public void get(int index, out float _return) { _return = _rf._floatList[index]; } public void set(int index, float value) { _rf._floatList[index] = value; } } } ========================================================= 不好意思~沒有心力解釋程式碼,在這邊說句抱歉。 完整程式碼: http://pastie.org/2364976 ========================================================= ※ 引述《BYoYB (BYoYB)》之銘言: : 請教冷羽大大: : 這個寫法好像只適合class內僅有單一成員,是嗎? : 如果有兩個以上的成員該如何解決呢? : 如: : class intList : { : private List<int> itemList = new List<int>(); : private List<float> pointList = new List<float>(); : } : 謝謝 : ※ 引述《s3748679 (冷羽憶塵)》之銘言: : : 嘿~我也來仿一個.. : : class IntList : : { : : private List<int> itemList = new List<int>(); : : public int this[int index] : : { : : get : : { : : return itemList[index]; : : } : : set : : { : : itemList[index] = value; : : } : : } : : } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.164.82.197
文章代碼(AID): #1EHYjBxM (C_Sharp)
文章代碼(AID): #1EHYjBxM (C_Sharp)