Vector
いくつかの方法で初期化できるカスタムクラスがあります。すべてゼロで指定された長さのベクトルを作成する次のコンストラクターがあります。
public Vector(int length) { ... }
または、実装することでオブジェクト初期化子を使用し、このようIEnumerable
なAdd(..)
メソッドを使用して、指定されたベクトルを埋めることができます
var v1 = new Vector{ 1, 2, 5 };
問題は、次のコードを記述できるという事実にあります。
var v1 = new Vector(3){ 1, 2, 5 };
これは問題ないように見えますが、最初の 3 つの値が 0 で、次の 3 つの値が 1、2、5 である長さ 6 のベクトルを作成することになります。理想的には、これは値が 1、2、5 で長さ 3 のベクトルを返すだけです。私はこれのオブジェクトの初期化を経験し、ステップを踏みましたが、オブジェクトが作成されていることを示す兆候はないようです。コンストラクターが実行され、3 つのAdd()
メソッドが呼び出されているように見えます。Add()
メソッドを呼び出しているのがオブジェクト初期化子であることを確認し、メソッドが追加の値を作成しないように保護するにはどうすればよいですか?
psコメントセクションで明らかなように、このクラスのAPIは、質問にあるように優れていません。まだ進行中の作業ですが、私のアイデアをもう少し洗い流すのに役立ったので、コメントに感謝します. コメントが意味を成すように、質問をそのままにしておきます。