C#のコードで、string
とString
の両方の表記を目にすることがありませんか? これはどちらも.NETのSystem.String
型を指しており、実体としての違いはありません。
言語仕様上の違い
string
はC#の**予約語(キーワード)**であり、String
は.NETのSystem.String
クラスそのものを表しています。これは、int
とSystem.Int32
、bool
とSystem.Boolean
の関係と同じです。
実行時の違いはナシ
string s1 = "example"; String s2 = "example"; Console.WriteLine(s1.GetType() == s2.GetType()); // True
このように、string
とString
で宣言された変数はどちらもSystem.String
型であり、動作上の違いはありません。コンパイル後のILコードでも差は確認されていません。
使い分け
以下のような使い分けが一般的と言えるでしょう。
-
string
:変数宣言、戻り値、引数など、日常的な型指定に使用されます。C#では基本的にこちらで書くことが多いでしょう。string name = "Taro";
-
String
:String.IsNullOrEmpty
やString.Format
など、静的メソッドを呼び出す際に使用されるケースが見られます。型名としての明示性を重視した記述です。string greet = String.Format("Hello {0}!", name);
ただ、string.IsNullOrWhiteSpace
といった表記も可能であるため、どちらを使うかはコーディング規約や個人のスタイルに依存します。個人的には、大文字のStringはString.Format
の時くらいで、他はすべて小文字というのが一般的かな、と思います。
名前空間に関する補足
String
を使用する場合、System
名前空間への参照が必要ですが、通常はusing System;
が含まれているため、特に意識する場面は少ないでしょう。一方、string
はC#のキーワードであるため、どのスコープでも問題なく使用できます。
まとめ
項目 | string | String |
---|---|---|
種別 | C#の予約語(エイリアス) | .NETのSystem.String クラス |
実体 | 同じ(System.String ) |
同じ(System.String ) |
主な用途 | 型の宣言や変数定義など | 静的メソッドの呼び出しなど |
推奨傾向 | 一般的なコードではstring が推奨 |
規約に応じて使い分ける |
string
とString
はどちらも同じ型を表しており動作に違いはありません。可読性やスタイルの統一といった観点から、プロジェクトに合わせて記述するのがいいでしょう。