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はどちらも同じ型を表しており動作に違いはありません。可読性やスタイルの統一といった観点から、プロジェクトに合わせて記述するのがいいでしょう。
