Rainbow Planet

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

C#

C#のIListとは?Listとの違いや使いどころもご紹介

投稿日:2021年2月8日 更新日:

<目次>

(1) C#のIListとは?Listとの違いや使いどころもご紹介
 (1-1) IListやIList<T>とは?
 (1-2) Listとの違い
 (1-3) IListの利用シーン

(1) C#のIListとは?Listとの違いや使いどころもご紹介

(1-1) IListやIList<T>とは?

「IList」は非ジェネリクスの「インターフェイス」で、「ICollection」を実装しています。

(図111)継承関係
・「IList」は「ICollection」を継承
・「ICollection」は「IEnumerable」を継承

「IList<T>」はジェネリクス(総称型=汎用的な型)のインターフェイスで、「ICollection<T>」インターフェイスと「IEnumerable<T>」インターフェイスを実装しています。

(図112)継承関係
・「IList<T>」は「ICollection<T>」を継承
・「ICollection<T>」は「IEnumerable<T>」を継承

目次にもどる

(1-2) Listとの違い

Listは「クラス」なのに対してIListは「インターフェイス」です。

ListクラスはIListインターフェイスを実装しており、List型を扱う事に特化している反面、IListはインターフェイスなので、IListを継承したクラスのインスタンス(Listなど)を受け取る事ができます(※補足1)。

なので、IListの方がより汎用的な型として使う事ができます(List型を入れたり、あるいはIListを継承した独自クラスのインスタンスを入れる事もでき、特にそれらの型を意識せずに汎用的に使える)。

(※補足1)
インターフェイスなので「参照型」(*注1)であり、基本的には定義した上で宣言を行うと、それを継承しているクラスのインスタンスへの参照(アドレス)を格納する事ができます。
 
(*注1)
値のアドレスを保持する変数です。「参照型」の対は「値型」で、これらは通常int型などのように「値」そのものを保持した変数です。
対してstringのような「参照型」の変数は、値自体は持たず代わりに値のアドレスを保持しています。
 
特にIListインターフェイスは.NETフレームワークの中で定義済みなので、次のようにIListを継承する「List」型のインスタンスを格納する事ができます。
 
//【OK】
IList<string> ls1 = new List<string>();

(図121)

逆にインターフェイスなので、これ自体をインスタンス化する事はできません。

//【NG】
Ilist<string> ls2 = new IList<string>();

(図122)

目次にもどる

(1-3) IListの利用シーン

汎用的なクラスを作りたい場合にも使えます。例えばもしライブラリ等を通じて提供するケースの場合、Fixされた「クラス」としてよりは、「インターフェイス」として提供する方が汎用的に使えて望ましいため、その場合はIListを使います。

そして、IListを使う事で、中身がListであろうと配列であろうと、それらを意識せずに汎用的に使う事ができます。

加えて、foreachにより要素をループするだけであれば、「List<T>」はもちろんの事「IList」すら使わなくても「IEnumerable<T>」で十分です(読む人も「IEnumerable<T>」ならば、要素をforeachでループするのみ、と事前に把握できる=可読性が向上するメリットがある)。

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-C#

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

C#でファイルの存在チェックを行う方法+サンプルプログラムをご紹介

<目次> (1) C#でファイルの存在チェックを行う方法  (1-1) 構文  (1-2) サンプルプログラム (1) C#でファイルの存在チェックを行う方法 (1-1) 構文 (構文) if (!F …

C#のvarの使いどころは?初めての方に向けてサンプルプログラムを使ってご紹介

<目次> (1) C#のvarの使いどころは?初めての方に向けてサンプルプログラムを使ってご紹介  (1-1) ArrayListに異なるデータ型が混在しているパターン  (1-2) LINQのクエリ …

C#で文字列の前に付いてるアットマーク「@」について

<目次> (1) C#で文字列の前に付いてるアットマーク「@」について  (1-1) 概要  (1-2) 主な用途  (1-3) 注意点 (1) C#で文字列の前に付いてるアットマーク「@」について …

C#のDB接続時のエラー(provider: Named Pipes Provider, error: 40 – Could not open a connection to SQL Server)

<目次> (1) 記事の目的  (1-1) エラー概要  (1-2) エラー原因  (1-3) エラー対策   (1-3-1) SQLServer:リモート接続を有効化   (1-3-2) SQLSe …

C#からDB接続でSQLServerに接続してSELECT文を実行する方法

<目次> (1) C#からDB接続する方法~SQLServerへの接続プログラム例もご紹介~  (1-1) 構文(DB接続)  (1-2) 構文(SELECT文発行)  (1-3) サンプルプログラム …

  • English (United States)
  • 日本語
Top