2008-08-27 8 views
5

私は反復できる従業員のリストを返すクラスメソッドを持っています。リストを返す最良の方法は何ですか?通常、私はArrayListを返します。しかし、私が理解するように、インタフェースはこのタイプの動作に適しています。どのインタフェースを使うのが最適でしょうか?また、なぜ実装(例えばArrayListオブジェクト)ではなく、インタフェースを返す方が良いのでしょうか?それはちょうど私にとってもっと多くの仕事のように思えます。インターフェイスの理解

答えて

4

個人的には、私はList <従業員>を使用してバックエンドでリストを作成し、返品時にIListを使用します。インターフェイスを使用すると、コードを使用するユーザーを変更することなく、実装を変更する柔軟性が得られます。 ArrayListを貼りたい場合は、非汎用のIListになります。

1

このようなことをする最良の方法は、あなたが言うように、リストを返すことです。好ましくはジェネリックを使用して、リスト<Employee>を返します。

ArrayListではなくListを返すことは、後で、たとえばLinkedListを使用することを決めた場合、オブジェクトを作成する場所以外のコードを変更する必要がないことを意味します(つまり、 "new ArrayList())"を呼び出します。

0

戻り値の型はIList<Employee>である必要があります。

つまり、メソッドの呼び出し元はIListが提供するものを使用できますが、ArrayListに固有のものは使用できません。その後、ある時点でLinkedListまたはYourCustomSuperDuperListがパフォーマンスやその他の利点を提供していると感じる場合は、あなたのメソッド内で安全に使用できます。インタフェース略インターフェイス101 ;-)

0

実装と実装のユーザとの間の契約です。

インターフェイスを使用することで、ユーザーの契約を維持する限り、実装を必要なだけ変更できます。

また、複数の実装で同じインターフェースを使用できるため、ユーザーはインターフェースとやり取りするコードを再利用できます。

0

あなたは言いたいことは言いませんが、.NETishの場合は、IListをListやArrayListよりも返すことはもうありませんが、古いクラスの単なる言及は私になりますあなたが.NETについて話していないと思う。配列は、実際にこのインタフェースを実装するので、あなたが同様>のIList <を返すことがありジェイソン

@

1

リスト全体を反復処理する場合は、リストをIEnumerable(.NET用)として返すメソッドを定義できます。

あなたが必要とする機能だけを提供するインターフェイスを返すことで、新しいコレクションタイプが今後提供される場合、アプリケーションのより良い/より速い/より良い一致が引き続きIEnumerableを実装している限り、あなたのメソッドは、その内部で新しい型を使用して、それを呼び出すコードを変更することなく呼び出すことができます。

0

インターフェイスは、本質的に、クラスが特定のメソッドまたは属性を持つ契約です。ダイレクトインプリメンテーションではなくインターフェイスにプログラミングすることで、「契約」が引き続き行われている限り、インプリメンテーションを完全に入れ替えることができるため、よりダイナミックで管理しやすいコードが可能になります。あなたが記述する場合には

、インターフェイスを渡すと、あなたの特定の利点を与えるものではありません、それは私だったら、私はジェネリック型でのArrayListを渡し、または配列そのものを渡しますlist.toArray()

1

コレクションの注文が必要な理由はありますか?単にIEnumerable<Employee>を返さないのはなぜですか?これは必要最小限のものを提供します。後でBag、Set、Treeなどのような他の形式のストレージを必要とする場合、契約はそのまま残ります。

0

実際には、フレームワークであれば少なくともリストを返すべきではありません。少なくとも、それを考えていなくても、使用する推奨クラスはコレクションです。 Listクラスには、サーバーの拡張性の問題を犠牲にして、パフォーマンスがいくつか改善されています。これは実際にはFXCopルールです。

あなたはthis article

1

でそのための推論を持っている私はそれがインタフェースを返すために、より良いということを前提に反対。私の理由は、コードのブロックが公開する有用性を最大限にしたいということです。

これを念頭に置いて、インターフェイスは引数として項目を受け入れるために機能します。関数のパラメータが配列またはArrayListを呼び出す場合、それが渡すことができるのはその唯一のことです。関数のパラメータがIEnumerableを呼び出す場合は、そのいずれかと他の多くのオブジェクトを受け入れます。もっと便利です

戻り値は逆です。 IEnumerableを返すときに行うことができるのは、IEnumerableを列挙することだけです。便利なリストを持っていれば、その関数を呼び出すコードでも、カウントを得るなどの他の多くの処理を簡単に行うことができます。

私は、あなたがArrayListから離れるように助言する人たちと一緒になっています。ジェネリックスはです。

関連する問題