none
Visual C#でクラスのプロパティ作成時に、データ型が配列の場合の例を教えてください RRS feed

すべての返信

  • こんにちは。

    型がなんらかの配列のプロパティの定義方法を知りたいという意味ではないですよね。
    初期化の方法ですか?

    2016年11月25日 11:30
    モデレータ
  • 何を聞きたいのか分かりません。それ以前に質問の体をなしてないです。

    それに過去あなたが立てたスレッドは、回答をもらっておきながら放置状態のものがほとんどです。

    改善してください。

    2016年11月25日 11:34
  • 返答、ありがとうございます。

    私はvisual Basicを得てとしていて

    クラスの中で

    Public Property Cells(ByVal X as Integer,ByVal Y as Integer) as Cell

       Get

            return m_Cells(X,Y)

       end Get

      Set(ByVal value as Cell)

          m_cells(X,Y)=value

      End Set

    のようなコードを、C#でも、変えて使えないかなと。

    2016年11月25日 12:55
  • C#では出来なかったと思います。
    なのでそのまま配列返してください。
    2016年11月25日 14:03
    モデレータ
  • インデクサなら書けますけど、同じクラス内に複数そのような定義を作るのはできないのでは?と思っています。

    private int[,] _cells = new int[2, 5];
    
    public int this[int x, int y]
    {
        get { return _cells[x, y]; }
        set { _cells[x, y] = value; }
    }

    もし、そういう使い方をしたい場合はクラスを作る方がいいと思いますけどね。

        public partial class Form1 : Form
        {
           private readonly Cells _cells1 =new Cells();
            private readonly Cells _cells2 = new Cells();
            public Cells Cells1 { get { return _cells1; } }
            public Cells Cells2 { get { return _cells2; } }
        }
    
        public class Cells
        {
            private readonly int[,] _cells = new int[2, 5];
    
            public int this[int x, int y]
            {
                get { return _cells[x, y]; }
                set { _cells[x, y] = value; }
            }
        }

    • 回答としてマーク 星 睦美 2016年11月28日 7:47
    • 回答としてマークされていない 星 睦美 2016年11月28日 7:57
    2016年11月25日 14:37
    モデレータ
  • のようなコードを、C#でも、変えて使えないかなと。

    C#ではできないですね。代わりにメソッドを使うか、インデクサ付きの型を新たに作成して、それを利用するぐらいでしょうか。ちなみにC#のインデクサはVBでいうところのデフォルトプロパティだと思えばわかりやすいと思います。

    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2016年11月25日 15:41
    モデレータ
  • 一応、以下のようにできました。動くかどうかは、確かめていません。
    下のクラスを作成するのも、参考にします。ありがとうございました。

            public Cell[,] Cells = new Cell[8, 8];
            public Cell this[int X,int Y]
            {
                get {
                    return m_Cells[X, Y];
                }
                set{
                    m_Cells[X, Y] = value;
                }
            }

    2016年11月26日 0:25
  • getやsetの内容が、この宣言の変数に限らない、配列変数、以下m_Cells->これもあらかじめ、Cellで宣言して、newしてます。

    以下のようでも、エラーは出ないのですが、setできないようです。

    class ReverseGrid
        {
            public int CellSize = 48;
            public int XCount = 8;
            public int YCount = 8;
            public int Str_width = 15;
            public int[,] Data = new int[8,8];
            public Cell[,] m_Cells = new Cell[8, 8];
            //public Cell[,] _value = new Cell[8,8];
            //public int X;
            //public int Y;
            public ReverseGrid()
             {
                for (int i = 0; i <= XCount-1; i++) { for (int j = 0; j <= YCount-1; j++) {
                        m_Cells[i, j] = new Cell(this, new Point(i, j)); } }
            }
            public Cell[,] Cells = new Cell[8, 8];
            public Cell this[int x, int y]
            {
                get { return m_Cells[x, y]; }
                set{ m_Cells[x, y] = value; }
            }

    2016年11月28日 7:48
  • フォーラム オペレーターの星 睦美です。North_W さん、こんにちは。

    質問の内容からVisual C# に関する話題を扱っているフォーラムにスレッドを移動させていただきました。
    フォーラム ユーザーからの回答がお役にたちましたら、投稿者からの[回答としてマーク] をお願いします。

    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2016年11月28日 8:01
  • 「エラーは出ないのですが、setできないようです」では伝わってこないので、どういったそのコードを利用するコードを書いて、どういう結果になることを期待して、実際はどうだったか、観測方法も含めて書いていただけませんか?
    2016年11月28日 13:07
    モデレータ
  • set時に、変数自体がエラーマークされました。上のコードには、エラーがあると、思います。m_Cellを設定しないで、Cellsを設定してから、mCellに代入してやればいいと思いました。
    2016年11月29日 0:13
  • 言葉は正しく、適切にお願いします。
    「エラーマークされました」と言われても伝わらないです。

    二度目ですのでもう少し踏み込んで書きます。

    ・エラー、あるいは例外を起こした利用側のコードも具体的に記載してください。
    ・そのコードでどうなることを期待していたのかを具体的に明らかにしてください。
    ・結果としてどうなったか、エラーなのか、例外なのか、あるいは現象なのかを明確にしてください。
    ・エラーや例外であれば、その文言を正確に書き写してください。
    ・現象なのであれば、観測方法も含めて具体的に明らかにしてください。

    これらを実施してもらえない場合は、現状の反応だと推測困難なので、解決不可能に見えます。

    2016年11月29日 13:50
    モデレータ
  • 以下で、うまく動きました。public Cell[,] Cells = new Cell[8, 8];
            public Cell this[int x, int y]
            {
                get {
                    //m_Cells[x, y] = Cells[x, y];
                    return Cells[x, y];
                }
                set{
                    //m_Cells[x, y] = value;
                    Cells[x, y] = value;
                }
            }
    2016年11月30日 0:25
  • 以上で、このスレッドは解決とします。
    2016年11月30日 0:26
  • インデントやなんやら、ツッコミどころがいっぱい。

    m_Cells と Cells というフィールド変数があります。これ、どっちかだけでいいんじゃないですかね?
    XCount, YCount って、Data や Cell の数と関連があるのでしょうか?関連があるなら、変えることができたら、特に外部から変更されるのはまずいのではないでしょうか。
    それを言ったら、Cells などすべて public なので、変更し放題ですが。

    class ReverseGrid
    {
        public int CellSize = 48;
        public int XCount = 8;
        public int YCount = 8;
        public int Str_width = 15;
        public int[,] Data = new int[8,8];
        public Cell[,] m_Cells = new Cell[8, 8];
        public ReverseGrid()
        {
            for (int i = 0; i <= XCount-1; i++) { for (int j = 0; j <= YCount-1; j++) {
                m_Cells[i, j] = new Cell(this, new Point(i, j)); } }
        }
        public Cell[,] Cells = new Cell[8, 8];
        public Cell this[int x, int y]
        {
            get { return m_Cells[x, y]; }
            set{ m_Cells[x, y] = value; }
        }
    }
    


    Jitta@わんくま同盟

    2016年11月30日 12:47