私は反復できる従業員のリストを返すクラスメソッドを持っています。リストを返す最良の方法は何ですか?通常、私はArrayListを返します。しかし、私が理解するように、インタフェースはこのタイプの動作に適しています。どのインタフェースを使うのが最適でしょうか?また、なぜ実装(例えばArrayListオブジェクト)ではなく、インタフェースを返す方が良いのでしょうか?それはちょうど私にとってもっと多くの仕事のように思えます。インターフェイスの理解
答えて
このようなことをする最良の方法は、あなたが言うように、リストを返すことです。好ましくはジェネリックを使用して、リスト<Employee
>を返します。
ArrayListではなくListを返すことは、後で、たとえばLinkedListを使用することを決めた場合、オブジェクトを作成する場所以外のコードを変更する必要がないことを意味します(つまり、 "new ArrayList())"を呼び出します。
戻り値の型はIList<Employee>
である必要があります。
つまり、メソッドの呼び出し元はIList
が提供するものを使用できますが、ArrayList
に固有のものは使用できません。その後、ある時点でLinkedList
またはYourCustomSuperDuperList
がパフォーマンスやその他の利点を提供していると感じる場合は、あなたのメソッド内で安全に使用できます。インタフェース略インターフェイス101 ;-)
だ
実装と実装のユーザとの間の契約です。
インターフェイスを使用することで、ユーザーの契約を維持する限り、実装を必要なだけ変更できます。
また、複数の実装で同じインターフェースを使用できるため、ユーザーはインターフェースとやり取りするコードを再利用できます。
あなたは言いたいことは言いませんが、.NETishの場合は、IListをListやArrayListよりも返すことはもうありませんが、古いクラスの単なる言及は私になりますあなたが.NETについて話していないと思う。配列は、実際にこのインタフェースを実装するので、あなたが同様>のIList <を返すことがありジェイソン
@
。
リスト全体を反復処理する場合は、リストをIEnumerable(.NET用)として返すメソッドを定義できます。
あなたが必要とする機能だけを提供するインターフェイスを返すことで、新しいコレクションタイプが今後提供される場合、アプリケーションのより良い/より速い/より良い一致が引き続きIEnumerableを実装している限り、あなたのメソッドは、その内部で新しい型を使用して、それを呼び出すコードを変更することなく呼び出すことができます。
インターフェイスは、本質的に、クラスが特定のメソッドまたは属性を持つ契約です。ダイレクトインプリメンテーションではなくインターフェイスにプログラミングすることで、「契約」が引き続き行われている限り、インプリメンテーションを完全に入れ替えることができるため、よりダイナミックで管理しやすいコードが可能になります。あなたが記述する場合には
、インターフェイスを渡すと、あなたの特定の利点を与えるものではありません、それは私だったら、私はジェネリック型でのArrayListを渡し、または配列そのものを渡しますlist.toArray()
コレクションの注文が必要な理由はありますか?単にIEnumerable<Employee>
を返さないのはなぜですか?これは必要最小限のものを提供します。後でBag、Set、Treeなどのような他の形式のストレージを必要とする場合、契約はそのまま残ります。
実際には、フレームワークであれば少なくともリストを返すべきではありません。少なくとも、それを考えていなくても、使用する推奨クラスはコレクションです。 Listクラスには、サーバーの拡張性の問題を犠牲にして、パフォーマンスがいくつか改善されています。これは実際にはFXCopルールです。
あなたはthis article
でそのための推論を持っている私はそれがインタフェースを返すために、より良いということを前提に反対。私の理由は、コードのブロックが公開する有用性を最大限にしたいということです。
これを念頭に置いて、インターフェイスは引数として項目を受け入れるために機能します。関数のパラメータが配列またはArrayListを呼び出す場合、それが渡すことができるのはその唯一のことです。関数のパラメータがIEnumerableを呼び出す場合は、そのいずれかと他の多くのオブジェクトを受け入れます。もっと便利です
戻り値は逆です。 IEnumerableを返すときに行うことができるのは、IEnumerableを列挙することだけです。便利なリストを持っていれば、その関数を呼び出すコードでも、カウントを得るなどの他の多くの処理を簡単に行うことができます。
私は、あなたがArrayListから離れるように助言する人たちと一緒になっています。ジェネリックスはです。
- 1. Web API DOMインターフェイスの理解
- 2. 理解DAOパターンとインターフェイス
- 3. ICollection実装とインターフェイスの理解
- 4. は、UITabBarControllerのタブバーのインターフェイスを理解しています
- 5. インターフェイスと基底クラスの使用の理解
- 6. Java:Cloneableインターフェイスの理由
- 7. wlan-routerの管理インターフェイス
- 8. インターフェイスの代理人とイベント?
- 9. gRPC/Protobufインターフェイスのバージョン管理
- 10. インターフェイスAがインターフェイスBのプロパティを非表示にする理由
- 11. プログラミング - 私はのように、一つは、インターフェイスにプログラム常にべき理解し、
- 12. C#のインターフェイスを完全に理解しようとしています
- 13. 一般的なインターフェイスとタイプの解析
- 14. Apple WatchでのGlanceインターフェイスの管理
- 15. の理解のために、理解
- 16. ノード/モンゴでの理解の理解
- 17. バックボーンとマリオネットの理解ライフサイクルの理解
- 18. イテレータのインターフェイスを処理する例外
- 19. SqlDataReader.ReadAsync()のインターフェイスがない理由
- 20. SQLAlchemyの管理インターフェイスですか?
- 21. USBインターフェイス経由の外部論理メモリブロック?
- 22. C#の解析の理解
- 23. 高解像度OS XインターフェイスPSD
- 24. 解決できないインターフェイス実装エラー
- 25. Angular2タイプスクリプトグローバルプロバイダで解決するインターフェイス
- 26. 管理インターフェイスでの集中管理型ログ
- 27. pandas.read_csv()float解析の理解
- 28. アセンブリコードの解読と理解
- 29. SFINAEの理解
- 30. バターワースフィルタの理解