質問: c# stringとsystem.string違い c#のstringとsystem.stringこの2つの違いが分かりません。 どのような時に使い分けをすれば良いのでしょうか。 そもそも別のものなのでしょうか? > stringは、c#のネイティブなデータタイプです。ただし、すべての基本タイプと同様に、stringは、実際には.netライブラリのタイプの別名です。この場合はsystem.stringです。 > http://www15.ocn.ne.jp/~sunsan-k/sunsank.files/sunsan/d-net/csharp_index/chap2/c2-19.html ここに書いている意味はstringとsystem.stringは同じという意味なのでしょうか?
回答: string と system.string は型として使われる限り単なる別名なので同じものです。 foo.system.string みたいなものが用意されて foo 名前空間内から使うような場合は異なりますが,特殊例過ぎるのでこれは考えないものとします。 コンパイラは,ソース上の型として string と書かれているものは,system.string とかかれているものとして処理します。 # 正確には "system.string, mscorlib, version=4.0.0.0, culture=neutral, publickeytoken=b77a5c561934e089" という型 (.net 4 の場合) これは,sdk 付属の逆アセンブラでコードを見ると,string を使っても system.string を使っても同じコードになることから確認できます。 同じように,int は system.int32 の別名ですし,bool は system.boolean の別名です。 使い分けは,特別決まりはありません。 唯一,メソッド名等に使う場合には言語固有の名称を避ける (clr の名前を使う),というのはあります。 msdn: 一般的な名前付け規則 http://msdn.microsoft.com/ja-jp/library/ms229045.aspx 具体的には, ・toint よりも, ・toint32 の方が好ましい,ということです。 # 上側の名前付け規則だと,visual basic においては tointeger であるべき,となる。 私は,static メソッドの呼び出しに使う場合は clr の名前を使い,それ以外では言語固有の名称を使っています。 書籍によっては,常に clr の名前を使うべき,という物もあったりします。 # が, for (int32 i = 0; ......みたいなコードはほとんど見ません。 自分なりの物でいいので,統一したルールを用意しておくのがよいでしょう。 # 常に言語固有の名称でもよいと思います。