Re: [問題] class中存取陣列元素的寫法
在下也提供一個方法,不過挺複雜的^^".. 不一定實用,看看就好...
目的:
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
討論串 (同標題文章)
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章