まとめ - カスタムリスト
CoddyのC#ジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 40/70。
チャレンジ
簡単演算子のオーバーロード、インデクサー、ToString() のオーバーライド、そして拡張メソッドといった、この章で学んだすべての高度な機能を組み合わせた CustomList クラスを構築しましょう。自然で直感的に使用できるコレクションを作成します。
コードは以下の3つのファイルに分けて構成します:
CustomList.cs:Collections名前空間にCustomListクラスを作成します。このクラスは内部の整数配列をラップし、直感的なアクセスパターンを提供します。リストには以下の機能を持たせてください:- 項目を格納するためのプライベートな整数配列と、格納されている項目数を追跡する
Countプロパティ(プライベートセッター付き) - 容量(整数)を受け取り、内部配列をそのサイズで初期化するコンストラクター
- 次の利用可能な位置に項目を追加する
Add(int item)メソッド(空きがある場合) - 位置によって項目の取得と設定を可能にするインデクサー
this[int index] - 2つの CustomList を結合して、両方のすべての項目を含む新しいリストを作成するオーバーロードされた
+演算子(新しいリストの容量は、両方のカウントの合計にする必要があります) - 項目を
[item1, item2, item3]の形式で返すオーバーライドされたToString()メソッド。空のスロットではなく、Countまでの項目のみを含めてください。
- 項目を格納するためのプライベートな整数配列と、格納されている項目数を追跡する
ListExtensions.cs:Collections名前空間に静的クラスListExtensionsを作成し、CustomList 用の拡張メソッドを定義します:Sum()- リスト内のすべての項目(Countまで)の合計を返します。
Program.cs: メインファイルで、2つの CustomList を作成し、それぞれに項目を追加します。その後、すべての機能が連携して動作することを示してください。インデクサーを使用して項目にアクセスし、+演算子でリストを結合し、ToString()を使用して出力し、拡張メソッドを使用して合計を計算します。
6つの入力が与えられます:
- 最初のリストに追加する3つの整数
- 2番目のリストに追加する3つの整数
最初のリストを容量5で、2番目のリストを容量3で作成します。それぞれのリストに対応する3つの入力値を追加してください。
出力を以下の形式で表示してください:
List 1: {ToString()}
List 2: {ToString()}
List 1[0]: {first item}
Combined: {ToString() of combined list}
Combined sum: {Sum()}例えば、入力が 10, 20, 30, 5, 15, 25 の場合、出力は以下のようになります:
List 1: [10, 20, 30]
List 2: [5, 15, 25]
List 1[0]: 10
Combined: [10, 20, 30, 5, 15, 25]
Combined sum: 105インデクサーによる配列のようなアクセス、+ 演算子による自然なリストの結合、ToString() による読みやすい出力、そして拡張メソッドによる便利な機能の追加など、すべての要素がどのように連携しているかに注目してください。これが、適切に設計されたクラスの使い心地です!
自分で試してみよう
using System;
using Collections;
class Program
{
public static void Main(string[] args)
{
// 6つの整数を読み込む
int a1 = Convert.ToInt32(Console.ReadLine());
int a2 = Convert.ToInt32(Console.ReadLine());
int a3 = Convert.ToInt32(Console.ReadLine());
int b1 = Convert.ToInt32(Console.ReadLine());
int b2 = Convert.ToInt32(Console.ReadLine());
int b3 = Convert.ToInt32(Console.ReadLine());
// TODO: 容量5の最初の CustomList を作成する
// TODO: 最初のリストに a1, a2, a3 を追加する
// TODO: 容量3の2番目の CustomList を作成する
// TODO: 2番目のリストに b1, b2, b3 を追加する
// TODO: ToString() を使用してリスト1を出力する
// TODO: ToString() を使用してリスト2を出力する
// TODO: インデクサーを使用して List 1[0] を出力する
// TODO: + 演算子を使用してリストを結合し、結果を出力する
// TODO: Sum() 拡張メソッドを使用して結合されたリストの合計を出力する
}
}