きなこもち.net

.NET Framework × UiPath,Orchestrator × Azure × AWS × Angularなどの忘備録

String × string × 違いについてまとめてみた

この記事の目的

この記事では、
[string]と[String]の違いをまとめること
を目的としています。

本題

★夏休み課題
  • Repositoryパターン関連
    • Repositoryパターンの使い方

--GoF デザインパターンとは
-- 実際の使われ方調査

  • Linqを使ったデータの操作
    • Where

- Lazy クラスの使い方

  • Unity

-- HelloWorld

    • UI作成
    • 画面遷移
    • あといろいろ
  • NEW qiita記事の移行←【ここ】
★きっかけ

Daily Dotnet Tipsの記事で、C#のstring とStringについて書かれたものを見たので、自分なりにまとめてみました。
Back to Basics – string Vs. String in C# - Daily .NET Tips

自分のよりどころ(c#の師匠)としているのは、プログラミング.NET Frameworkという本です。

プログラミング.NET Framework 第4版 (Microsoft Press)

プログラミング.NET Framework 第4版 (Microsoft Press)


★師匠からの教え

師匠は、以下のようにstringとStringの違いについて言及しています。

筆者は 、コ ードで s t r i n gと S t r i n gのどちらを使用すべきなのかがわからずに混乱している開発者を何人も見てきました 。 C #の s t r i n g (キ ーワ ード )はそのまま S y s t e m . S t r i n g ( F C Lの型 )に対応するので 、これらの間に違いはなく 、どちらも使用できます 。

混乱している開発者・・・自分もその開発者の一人ですw
C#の言語仕様としては、FCLの型名を利用するのではなくキーワードを利用する実装が推奨されているそうです。ただ、C#のキーワードで定義されてる型と、ほかのプログラミング言語で定義されている型で違いがある場合があります。例えば、C#のキーワードでlongとなっているものは、FCLではint64ですが、C++/CLIではint32として扱われるなどがあります。これらの理由から、キーワードではなくFCLの型名でかく方が良いという見解もあります。

結局のところ、型名とキーワードで内部的な処理が違っているわけでもないので、実装されたコードを見たとき、違和感なく、そして誤解なく読み取ることができる方を選択すれば良いと思いました。

★型名とキーワードの違い(見た目編)

f:id:kinakomotitti:20180819142252p:plain
水色がFCLの型名、濃い青がキーワードとなります。

★型名とキーワードの違い(現実編)

せっかくなので、実際のソリューションではどのように使われているのか簡単に調べてみました。
以下はlog4netの実装の一部です。
f:id:kinakomotitti:20180819142745p:plain

一部を切り取ったので、すべてが上記のようになっているわけではありません。
ただ、このように混在している実装もあるため、この問題は本当にどっちでも良いということが見て取れます。


まとめ

Stringとstringはほぼ同じ。
その違いは、FCLの型名か、キーワードであること。
公式では、キーワードが推奨されている。
FCLの色はみずいろであるため、若干見にくい。
見にくい人は、キーワードにして色を濃くしたら良いと思います。
※特にXMLドキュメントを書くときは、濃いほうが色がわかりやすい。
という例↓
f:id:kinakomotitti:20180819143412p:plain