0

私は新しいC#開発者であり、2か月でプログラミングを行っています。独自のコレクションクラスを作成したいところに来ましたが、いくつか問題があります。

何をしたいですか?-データを格納するための独自のジェネリックコレクションクラス(リスト)を作成したい。私のクラスには、リストの最後にアイテムを追加したり、リストからアイテムを削除したりするためのメソッドが必要です。

  • 私のクラスには、リスト内のアイテムの数とiistの容量のプロパティが必要です。

  • リストをクラス内の配列に格納する必要があり、arayの長さは事前定義されている必要があります。

最初に、デザインを作成して、クラスがどのように見えるかを書き留めます。ここでは、メソッド、プロパティなど、必要なものすべてだけを書き留めます。これは、これまでに行ったことです。

   public void Propertie () // depending on how many items I have, I create an propertie for each item
        {

        }
        public void addItems() // method for adding items 
        {

        }

        public void removeItems() // method for removing items
        {

        }

        int[] storeList; // array for storing the list 
    }

したがって、実際のコーディングを開始する前に、何か間違ったことを見逃したかどうかを知りたいだけですか?

編集:この割り当てでc#コレクションまたはジェネリッククラスを使用することは許可されていません。

4

3 に答える 3

1

何か間違ったことをしたり、見逃したりしたかどうかを知りたいだけですか?

ここに表示されているデザインには、いくつか欠けているものがあります。最初に、一般的なリストを作成したいと言いました。汎用データを整数配列にどのように格納しますか?

また、あなたが与える署名addItems

public void addItems()

そしてあなたが与える署名removeItems

public void removeItems()

リスト オブジェクトにデータが与えられていない場合、リスト オブジェクトはどのようにして追加するものを認識しますか? 同様に、クライアント コードが指示しない場合、何を削除するかをどのように知るのでしょうか (常に最初のアイテムを削除することも、常に最後のアイテムを削除することもできますが、標準オブジェクトではなく、スタックまたはキュー領域にいることになります)。指向のリスト API)。

ここでエミュレートしようとする組み込みクラスであるSystem.Collections.Generic.Listの API を確認することをお勧めします。List が実装するすべてのプロパティとメソッドを実装する必要はありませんが、その API の一部を実装する必要があります。私がお勧めします

public sealed class MyList<T>
{
    public int Count { get; }
    public T this[int index] { get; set; }
    public MyList();
    public void Add(T item);
    public void RemoveAt(int index);
}

リストクラスの最低限の API として。type のフィールドをバッキング ストアとして宣言しT[]、内部sizeフィールドを追加して実装します。クライアント コードがバッキング ストアの長さよりも多くの項目を追加する場合は、新しいバッキング ストア配列 (おそらく古い配列の 2 倍のサイズ) を割り当て、要素を新しい配列にコピーして、開始する必要があることを忘れないでください。新しい配列をバッキング ストアとして扱います。

System.Collections.Generic.IEnumerableの実装も検討する必要があります。これは厳密には必要ありませんが、コレクション クラスをより便利にします。

于 2013-02-24T18:00:03.113 に答える
0

インターフェイスを実装できます。IList<T>インターフェイスには、独自のジェネリックリストクラスを構築するために必要なすべての署名が含まれています。IListのMSDNドキュメント

于 2013-02-24T18:35:50.880 に答える
0

本当にこれをやりたいと確信していると仮定すると、次のことを考慮する必要があります。

  1. サポートするタイプ(ジェネリックと言っていますが、例にはint配列があります
  2. アクセスと反復をどのようにサポートしますか (たとえば、foreach、配列スタイル [] をサポートしますか?)
  3. プログラマーはどのように長さを指定しますか (固定長と言いますか、プログラミングはそれを前もって指定しますか、デフォルトはありますか)
  4. 検索方法、並べ替え方法などをサポートしますか...
  5. プログラマーは、あるコレクションを別のより大きなコレクションにコピーできますか? 小さい方?
  6. FIFO、LIFO、双方向反復などをサポートする予定はありますか...

適切なジェネリック コレクションを作成するのは難しいため、コレクションでサポートする必要があるすべてのものを調べて、そこから始めることをお勧めします。

はい、あなたの最初の考えはまだ不完全です。少なくとも、データにアクセスし、そこにあるデータの量を知る方法が必要です。

于 2013-02-24T18:00:04.330 に答える