17

.NETの世界について話すとき、CLRは私たちが行うすべてのことに依存しています。.NETプログラマーが優れたプログラマーであるために必要なCLRの最低限の知識は何ですか?GC?、AppDomain?、Threads?、Processes?、Assembly / Fusion?

より多くの情報が見つかるトピックに関する記事、ブログ、本、またはその他へのリンクを投稿していただければ幸いです。

更新:いくつかのコメントから、私の質問が一部の人には明確ではないことに気づきました。私がCLRと言うとき、私は.NetFrameworkを意味するのではありません。.NETライブラリを記憶することではなく、実行環境(これらのライブラリが実行時に存在する)がどのように機能するかを理解することです。

私の質問は、「Microsoft®.NETのアプリケーションのデバッグ」の著者であるJohn Robbins(私がお勧めします)と、ここで引用したWintellectのJeffreyRichterに直接触発されました。導入の章の1つで、彼は「...すべての.NETプログラマーは、何がプローブされ、アセンブリがランタイムにどのようにロードされるかを知っている必要があります」と述べています。他にもそういうことがあると思いますか?

最終更新:「C#経由のCLR」の最初の5章を読んだ後、これを読んでいる人には誰にでも言わなければなりません。まだ読んでいない方は、この本を読んでください!

4

7 に答える 7

33

それらのほとんどは、多くの開発者が私の経験で陥る類のものよりもはるかに深いものです。私の経験で最も誤解されている (そして重要な) 側面:

  • 値型と参照型
  • 変数とオブジェクト
  • 参照による受け渡しと値による受け渡し
  • デリゲートとイベント
  • 言語、ランタイム、フレームワークの区別
  • ボクシング
  • ガベージ コレクション

「変数とオブジェクト」の前で、コードに関する 3 つのステートメントを次に示します。

string x = "hello";
  • (非常に悪い)xは 5 文字の文字列です。
  • (やや良い)xは 5 文字の文字列への参照です。
  • (正) の値はx5 文字の文字列への参照です

明らかに、最初の 2 つは「カジュアルな」会話では問題ありませんが、関係者全員が実際の状況を理解している場合に限ります。

于 2008-11-18T23:13:17.340 に答える
5

優れたプログラマーは、CLR について知っていることの量では測れません。確かにそれは素晴らしい始まりですが、彼は OOP/D/A や、デザイン パターン、ベスト プラクティス、O/RM の概念など、他の多くのことも知っている必要があります。

事実、「優れた .Net プログラマー」は、一般的なプログラミング理論と概念について十分な知識を持っている限り、CLR について多くを知る必要はまったくありません...

私はむしろ、Java の一般的な知識と経験が豊富な「優れた Java 開発者」を .Net の仕事に採用し、次に .Net の「マスター」を採用します。 「データベースを抽象化する」方法...

私は、.Netのプロの教師が、.Net と CLR について知っておくべきことを「すべて知っている」と同時に、「一般的な知識」が不足しているために、背中を壊すことなく本当に単純なことを行うことに完全に失敗しているのを見てきました.. .

于 2008-12-02T00:22:24.500 に答える
4

更新: Jeffrey Richter 著の CLR via C# の関連部分を読む..この本は参考になる..

于 2008-11-18T23:13:01.570 に答える
1

ジョンの答えは私(および代表者)にとってはかなり完全なようですが、優れたプログラマーを平均的なプログラマーから根本的に区別するのは、方法ではなく理由の質問に答えることだと思います。ガベージコレクションがどのように機能し、値型と参照型がどのように機能するかを知ることは素晴らしいことですが、値型と参照型をいつ使用するかを理解することはまったく別のレベルです。それは、ある言語で話すことと、ある言語で話すことの違いです(それは、私たちが持っている知識をどのように適用し、それらの決定にどのように到達するかがすべてです)。

于 2008-11-19T20:24:31.940 に答える
1

メモリ管理、デリゲートについて知っておくべきこと

于 2008-11-18T23:47:50.627 に答える
0

ジョンの答えは良いです。これらはすべてかなり基本的ですが、多くの開発者がよく理解していない重要な領域です。値型と参照型の違いを知ることは、.NETのGCがどのように動作するかについての基本的な理解につながると思いますが、さらに重要なことに、Disposeパターンをよく理解することが重要です。

あなたが言及する残りの領域は、CLR自体に関する非常に深い知識か、(まだ)広く使用されていないより高度な概念のいずれかです。[.NET 4.0は、並列拡張機能とMEFの導入により、その一部を変更し始めます。]

于 2008-11-18T23:24:02.700 に答える
0

把握するのが非常に難しいことの 1 つは、遅延実行などです。

IEnumerable を返すメソッドがどのように機能するかをどのように説明しますか? デリゲートは実際に何をしますか? そういうもの。

于 2008-12-02T00:06:24.610 に答える