6

言い換えれば、使用するのは正しいですか:

public class CustomerList : System.Collections.Generic.List<Customer>
{
    /// supposed to be empty
}

それ以外の:

using CustomerList = System.Collections.Generic.List<Customer>

CustomerList を 1 回定義するだけで済み、顧客リストが必要になるたびに常に同じ型を使用するため、最初のアプローチを使用したいと思います。一方、名前のエイリアシング アプローチを使用すると、どこでも再定義する必要があるだけでなく、誰かがそれを使用するたびに (大きなチームを考えてみてください)、別のエイリアスが与えられる可能性があり、コードが読みにくくなります。

この場合の意図は、クラスを拡張することではなく、単にエイリアスを作成することであることに注意してください。

4

9 に答える 9

12

基本クラスに何らかの機能を追加しない限り、ラッパー オブジェクトを作成しても意味がありません。本当に必要な場合は 2 番目を使用しますが、変数を作成しないのはなぜですか?

List<Customer> customerList = new List<Customer>();
于 2008-09-29T00:17:47.167 に答える
7

しないでください。人々が読むとき:

List<Customer> 

彼らはすぐにそれを理解します。彼らが読んだとき:

CustomerList

彼らはCustomerListが何であるかを理解する必要があり、それによってコードが読みにくくなります。コードベースで作業しているのがあなただけでない限り、読み取り可能なコードを書くことは良い考えです。

于 2008-09-29T06:09:13.420 に答える
4

そのようにエイリアスを使用しないことに同意します。あなたのチームの誰もが提示された方法でエイリアスを使用するべきではありません。エイリアシングが提供された理由ではありません。さらに、ジェネリックの仕組みから、使用する場所の数に関係なく、List クラスは常に 1 つしか存在しません。

を宣言して使用するだけでなくList<Customer>、最終的にはそのリストを別のものに渡したいと思うでしょう。具体的なものを渡すのを避けList<Customer>、代わりにIList<Customer>orICollection<Customer>を渡すと、これらのメソッドの回復力が高まり、プログラミングが容易になります。

将来、CustomerList コレクション クラスが本当に必要になった場合は、そのクラスにICollection<Customer>orIList<Customer>を実装して、メソッドを変更せずに、またはよくわからなくても、引き続きメソッドに渡すことができます。

于 2008-09-29T08:58:14.700 に答える
3

実際にはどちらも使用しないでください。フレームワーク設計ガイドラインに従った正しいアプローチは、パブリックAPIでSystem.Collections.ObjectModel.Collection <T>を使用するか、そこから継承することです(List <T>は内部実装にのみ使用する必要があります)。

ただし、名前付けの特定の問題に関しては、コレクションに機能を追加する必要がない限り、エイリアスを使用せずにジェネリック型の名前を直接使用することをお勧めします。

オブジェクトモデルからCollection<T>を返して、標準のプレーンバニラコレクションAPIを提供します。

高レベルのコレクションAPIを提供するために、オブジェクトモデルからCollection<T>のサブクラスを返します。

于 2008-09-29T01:01:34.427 に答える
1

あるプログラマーがタイピングを節約できたとしても、次のプログラマーにとってはメンテナンスの悪夢になる可能性があります。ここで多くの人が言っているように、ジェネリックを正しく入力するだけだと思います。これは、コードの意図をより明確かつ正確に記述したものであり、メンテナンス プログラマーに役立ちます。(6 か月後に 4 つの新しいプロジェクトが待っているあなたは誰でしょうか!)

于 2008-09-29T00:46:55.023 に答える
1

これは、「場合による」質問の 1 つです。

他の要件に加えて、顧客のリストとして動作する新しいクラスが必要な場合は、継承が有効です。

顧客のリストを使用するだけの場合は、変数を使用します。

于 2008-09-29T00:20:10.530 に答える
1

入力を節約したいだけなら、後者を使用してください。そうすれば、奇妙な継承の問題に遭遇することはありません。

論理的に異なるコレクション型を実際に公開したい場合は、前者を使用してください。戻って、それに何かを追加できます。

個人的には、私はただ使っList<Customer>て、それを一日と呼びます。

于 2008-09-29T00:22:46.703 に答える
1

私は基本的にエドに同意します。ジェネリック List コンストラクトの機能を実際に拡張する必要がない場合は、ジェネリック List を使用してください。

List<Customer> customerList = new List<Customer>();

機能を拡張する必要がある場合は、通常、継承を検討します。

3 番目の可能性は、一般的なリスト コンストラクトから機能を大幅に変更する必要がある場合です。その場合は、単に IEnumerable から継承することをお勧めします。そうすることで、列挙可能な操作 (「foreach」など) でクラスを使用できるようになりますが、すべてのクラスの動作を完全に定義することができます。

于 2008-09-29T00:23:25.173 に答える