3

私はこのようなクラスを持っています (これはコードのサブセットです)

public struct overlay
{
    [FieldOffset(0)]
    public Byte[] b;
    [FieldOffset(0)]
    public Int32[] i;
}



 class MyClass
    {
    private overlay data;    \\Initialised using data.b=new Byte[4096]

    public Int32 site0 { set { data.i[0] = value; } get { return data.i[0]; } }
    public Int32 site1 { set { data.i[1] = value; } get { return data.i[1]; } }
    public String s
    {
        get { return System.Text.Encoding.ASCII.GetString(data.b, 8, 16).TrimEnd(' '); }
        set { System.Text.Encoding.ASCII.GetBytes(value.PadRight(16)).CopyTo(data.b, 8); }
    }
    public Int32 site2 { set { data.i[5] = value; } get { return data.i[5]; } }

    }

現在、このようなサイト変数にアクセスしています...

MyClass m=new MyClass();
m.site0=1;
m.site1=1;
m.site2=1;

このようにアクセスしたいと思います..

MyClass m=new MyClass();
for (Int32 i=0; i<m.sites.Count; ++i)
    m.sites[i]=1;

誰かが私がそれを行う方法を提案できますか?

4

2 に答える 2

3

クラスのフィールドにインデクサーを作成することはできません。データを格納する独自のクラスを作成する必要があり、そのタイプのフィールドを作成できます。

class MyClass
{
    public MyIndexerClass Sites;
    public class MyIndexerClass
    {
        private byte[] data;

        public MyIndexerClass()
        {
            this.data = new byte[0];
        }
        public MyIndexerClass(byte[] Data)
        {
            this.data = Data;
        }

        public byte this[int index]
        {
            get
            {
                return data[index];
            }
            set
            {
                data[index] = value;
            }
        }
    }

    public MyClass()
    {
        this.Sites = new MyIndexerClass();
    }
    public MyClass(byte[] data)
    {
        this.Sites = new MyIndexerClass(data);
    }
}

Countproperty およびforeachonを使用する場合は、 IEnumerableMyIndexerClassを実装して独自の を作成する必要があります。Enumerator

于 2012-12-15T12:31:40.137 に答える
0

C#のインデクサー構文ではそれが可能で、次のようになります。

public byte this[int index] {
 get { return data[index]; }
 set { data[index] = value; }
}

これにより、型のインデクサーが定義されます。使い方はこんな感じ

m[i] = 1;

sitesただし、.NET の多くの配列およびリスト コンストラクトには既にインデクサーがあるため、たとえば Typeのフィールド/プロパティを定義できますList<byte>

于 2012-12-15T12:25:08.010 に答える