作者s3748679 (冷羽忆尘)
看板C_Sharp
标题Re: [问题] class中存取阵列元素的写法
时间Sat Aug 13 15:44:08 2011
在下也提供一个方法,不过挺复杂的^^".. 不一定实用,看看就好...
目的:
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