標準ライブラリについて

便利な関数群を使おう

.NETにはあらかじめ様々なメソッド(関数)が用意されています。
後から追加することなくそのまま使用できる関数群を標準ライブラリといいます。

.NETの標準ライブラリは膨大で、すべてを説明することはできません。
ここでは文法と同じくらいのレベルで頻繁に使用されるものをいくつか紹介します。

その前にこのページで基本的な事柄を説明します。

関数とメソッド

C#では関数のことをメソッドと呼びます。
これは後に説明するクラスの機能の一部として提供されているからですが、意味としては関数もメソッドも同じようなものです。
少なくともC#プログラミングでは使い分ける意味はないので、どちらで呼んでも構いません。

静的メソッドとインスタンスメソッド

C#のメソッドには大まかに二種類存在します。
細かい話はクラスの項で行うので、今は簡単に呼び出し方だけを説明しておきます。

静的メソッドは「データ型.メソッド名()」の形式で呼び出すメソッドです。
インスタンスメソッドは「変数名.メソッド名()」の形式で呼び出すメソッドです。


string str = "I have a pen.";

//静的メソッド
string.IsNullOrEmpty(str);

//インスタンスメソッド
str.ToUpper();

静的メソッドは操作対象となるデータ(変数など)を引数に指定します。
インスタンスメソッドは操作対象となるデータは「.」(ドット)の左側に指定します。

同じ機能を提供するメソッドでも静的メソッド版とインスタンスメソッド版の両方がある場合があります。

静的メソッドは静的関数staticメソッドとも呼ばれます。

インスタンスメソッドとnull

インスタンスメソッドは変数の中身がnullの状態では呼び出すことができません。


string str = null;

//OK
string.IsNullOrEmpty(str);

//エラー
str.ToUpper();

見た目は同じでも、変数の中身がnullの場合はそのデータ型の機能は使えません。
上の例ではToUpperメソッドの呼び出しの時点でエラー(例外)となります。

静的メソッドはnullを引数に渡しても必ず大丈夫というわけではありませんが(メソッドの実装の仕方による)、インスタンスメソッドは必ず実行に失敗するので注意が必要です。

プロパティ

インスタンスメソッドに似ているものにプロパティというものもあります。
例えばstring型変数の文字数を得るLengthプロパティなどです。


string str = "I have a pen.";

//Lengthプロパティ
int len = str.Length;

プロパティは変数が内部に持っている情報、と考えると良いです。
メソッドとは違いプロパティは引数がなく、丸括弧()も使用しません。

メソッドチェーン

ひとつのデータに対していくつかのメソッドを順に適用してデータを加工することはよくあります。
その場合は当然ですが必要なメソッドを順番に呼び出していきます。


string str = "I have a red pen.";

//Replaceメソッドの実行
string strResult = str.Replace("red ", "");

//ToUpperメソッドの実行
strResult = strResult.ToUpper();

これでも良いのですが、このようなコードは一行にまとめることができます。


string str = "I have a red pen.";

//Replace→ToUpperの順に実行
string strResult = str.Replace("red ", "").ToUpper();

Replaceメソッドの戻り値は、加工した後のstring型の値です。
(これらのメソッドの詳細についてはstring型のメソッドで説明します)
string型の値はstring型のインスタンスメソッドが使用可能なので、そのまま続けてToUpperインスタンスメソッドを呼び出しています。
つまり戻り値を変数等に格納せずに、そのままインスタンスメソッドを適用できます。
このような書き方をメソッドチェーンといいます。

必然的にメソッドチェーンの二番目以降で使用可能なのはインスタンスメソッドとなります。
戻り値のないメソッド(void型)の後ろにメソッドチェーンを使用することはできません。

改行OK

メソッドチェーンは一行が長くなりがちなので、途中で改行しても良いです。


string str = "I have a red pen.";

//Trim→Replace→ToUpperの順に実行
string strResult = str.Trim()
    .Replace("red ", "")
    .ToUpper();

複数行に渡っているように見えますが、末尾に;(セミコロン)がないのでC#の文法的には一行とみなされます。

コンパイルエラーと実行時エラー

プログラムでは大まかにコンパイルエラー実行時エラーの二種類のエラーがあります。

コンパイルエラーはコードの文法上の間違いで、コンパイル自体ができません。
実行時エラーは、コンパイルとプログラムの実行は可能ですが、プログラム実行時に処理の継続が不可能になるエラーです。

実行時エラーは、Visual Studioのデバッグモードで実行している場合はエラー箇所と説明が表示されます。
それ以外の場合(通常の実行方法)では、プログラムが強制終了し、いわゆる「落ちる」ことになります。

実行時エラーは例外処理という方法で対処可能です。