.NETのソースコードを見れたら設計の参考にできるのに... とか思ったことありませんか?
その願い叶いますよ。と言うか、.NETからOSS(オープンソース)になったのでGitHubで普通に公開されてます。
![](https://takemi.blog/wp-content/uploads/2023/09/00D90ECEDDFA45078397DE4A2A2F7549.webp)
Microsoft様ありがとう。.NETって最強資産をオープンソースで公開って英断だと思う。
![](https://takemi.blog/wp-content/uploads/2024/03/D46ED1C42500466BB89D4AD9CC80048F.webp)
公開するメリットってあるんでしょうか?
![](https://takemi.blog/wp-content/uploads/2023/09/00D90ECEDDFA45078397DE4A2A2F7549.webp)
一般的には、オープンソース化にしてみんなで盛り上げたほうが、もっと良くなるんじゃね? って思想がある(適当)。
ソースコードの公開場所
結論を言うと、ここに全部あります。
https://github.com/dotnet
そして、C#から利用されるLibrary部分はこっち(たぶん)。
https://github.com/dotnet/runtime
目的のソースコードを探す方法
公式ドキュメントを見る
1番簡単な方法です。公式ドキュメントに記載されてるリンクから移動します。
例えば、これはList型のドキュメントですが、ここに.csへのリンクがあります。
https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1
![learn.microsoft.comで検索する](https://takemi.blog/wp-content/uploads/2024/06/46EB7BC33A5C4D77A83BAA01D81DB15B_6F2EBBC26C334A38ADCAD15027F86A10.webp)
ただし、リンクが存在しないドキュメントも多いので、その場合は以降の方法で探します。
と言うか、元々ソースコードへのリンクとか無くて、気が付いたら増えてました。
![](https://takemi.blog/wp-content/uploads/2023/09/00D90ECEDDFA45078397DE4A2A2F7549.webp)
頑張って整備してる説あります。
GitHubの検索機能を使う
GitHubのディレクトリ構造が複雑なので、リンクをポチポチで辿るのは無理ゲー。なので、検索機能で探します。
検索する単語はクラス名とか名前空間を繋いだ正式名称とか、この辺を入力すると候補がでます。
![github.comで検索する](https://takemi.blog/wp-content/uploads/2024/02/46EB7BC33A5C4D77A83BAA01D81DB15B_A2303AD75442472F9D841830A42389A8.webp)
たぶん、相当な数の候補が出ると思いますが、ここから目的と思われるクラスを探します。
例としてSystem.IO.FileStreamなら、以下が該当するソースコードだと思います。
https://github.com/dotnet/runtime/blob/main/src/libraries/System.Private.CoreLib/src/System/IO/FileStream.cs
後は、この辺がLibraryのトップ(?)なので、ここから名前空間を参考にポチポチするとか。
https://github.com/dotnet/runtime/tree/main/src/libraries/System.Private.CoreLib/src
.NET Source Browserを利用する
本家で探すのが辛い場合は.NET Source Browserと呼ばれるサービスを利用します。
https://source.dot.net/
左に検索窓があるので、そこにクラス名とか名前空間を入力します。
こちらもいくつか候補が出ますが、詳細も表示されるのでGitHubより探しやすいです。
![source.dot.netで検索する](https://takemi.blog/wp-content/uploads/2024/02/46EB7BC33A5C4D77A83BAA01D81DB15B_3CE76E38AB21443C8A4B3D3D6B7E4C45.webp)
もしくはSystem.Private.CoreLibから名前空間で探せます。
https://source.dot.net/#System.Private.CoreLib,namespaces
![source.dot.netで検索する](https://takemi.blog/wp-content/uploads/2024/02/46EB7BC33A5C4D77A83BAA01D81DB15B_FBD7C9AD56534E9DB7EC970E8F9D418C.webp)
![](https://takemi.blog/wp-content/uploads/2023/09/00D90ECEDDFA45078397DE4A2A2F7549.webp)
名前空間からポチポチで探すのが1番楽だよ。
.NET Frameworkのソースコードを参考にする
.NET Frameworkのソースコードも公開されてます。
こちらは旧モデルですが、参考にするって意味なら役に立つと思います。
https://referencesource.microsoft.com/
![](https://takemi.blog/wp-content/uploads/2023/09/00D90ECEDDFA45078397DE4A2A2F7549.webp)
探し方は同じなので説明はカットします。
あとがき
GitHubからソースコードを落とすと、なんと約800MBあります。
もちろん全部がプログラムではないと思いますが、Libraryで800MBってやばい。
◆ C#に関する学習コンテンツ
この記事は参考になりましたか?
コメント