53454


クラスの中の配列に参照するときに`インスタンス.t[0] = 4`どという参照のやり方があれば教えてくれますでしょか？自分が調べた限りだと`public
int this[int x]{}`というやり方しかないため関数のに配列番号と入れる数字などを取ってやるやり方を考えたのですが  
やり方があれば知りたいです。

[code]

     class Program
    {
    
        class test
        {
            private int[] idx = new int[] { 1, 2, 3, 4, 5 };
    
    
    
    
            public void id3(int a,int b)
            {
                idx[a] = b;
            }
    
    
            public int id3(int a)
            {
                return idx[a];
            }
    
    
    
        }
    
        static void Main(string[] args)
        {
            test t = new test();
            t.id3(3);
    
            Console.WriteLine(t.id3(1));            
    
    
    
    
            Console.ReadKey();
        }
    }
    
[/code]


CC BY-SA 4.0
2019-03-09T12:00:10.113
53321
2019-03-15T17:35:06.917
2019-03-09T18:00:26.953
76
question
c#
クラスで配列のプロパティでドット演算子を使って参照するやり方が知りたい。

[code]

    class Test {
        public int this.T[int index]{
            get { /***/ }
            set { /***/ }
        }
    }
    
    Test instance = new Test();
    instance.T[0] = 4;
    
[/code]

みたいなことがやりたいということで良いでしょうか。  
C#にこのようなことをする機能はありません。  
(参考: <https://ufcpp.net/study/csharp/oo_indexer.html>)

間接的に行うことは可能です。  
インデクサを実装したクラスを別に実装し、それを返すプロパティを作成すれば同じ構文で記述することは可能になります。  
また、リスト型のクラスを実装し、キャストと代入をオーバーロードするという手も考えられます。

が、そこまでしてそのような記述をしたいのか、という問題は残ると思います。  
正攻法は matsuzawa さんの考えた通り、引数にインデックスをとるメソッドを作成することだと思います。


CC BY-SA 4.0
2019-03-15T14:58:54.390
53453
2019-03-15T14:58:54.390
20885
53321
answer


インデクサを実装した何かをプロパティとして公開すれば良いだけなので、元の配列をそのままプロパティとして公開してしまうのが一番簡単なように思うんですが?

[code]

    class Program
    {
        class Test
        {
            private int[] idx = new int[] { 1, 2, 3, 4, 5 };
    
            public int[] Idx
            {
                get
                {
                    return idx;
                }
            }
        }
    
        static void Main(string[] args)
        {
            Test tObj = new Test();
            tObj.Idx[1] = 3;
    
            Console.WriteLine(tObj.Idx[1]);
    
            Console.ReadKey();
        }
    }
    
[/code]

特に「`t`(上の例では`Idx`)が配列であることを隠蔽したい」なんて要求があるようには読み取れなかったんですが、もし何か特別な条件があるのならご質問に追記してください。


CC BY-SA 4.0
2019-03-15T17:35:06.917
53454
2019-03-15T17:35:06.917
13972
53321
answer