Shares転職して1年が経ちました。Shares転職して3年が経ちました。Lambdaの開発フローの違い」を話してきました。本の分量自体が索引含め606ページととても読み応えのあるものだったため、読んだ感想(ざっくり)からだんだん詳細が伝わるように書いていこうと思います。全部読み、各章についているの理解を確認するための問題も一通り考えてみました。いう人が読むといいかも普段業務や趣味でC#である程度意図通り動作するアプリケーションを書いているが...人のコードを読んでいて構文的にわからないことがある動くけどなんでそれが構文的に正しいかよくわかってないなぁと思うことがあるいつも手に馴染んだ書き方で書いているが、他にも書き方ありそうなので打ち手を増やしたいC#を体系的に勉強したいけどなにを「体系的」とするか一例を見てみたい書いたことがあるけど、動いている部分を説明できるように「基礎」を勉強し直したいときに読むとよさそうです。僕自身が読むにあたっては理解や知識に漏れがる部分がどんどん埋まっていく感じがしました。Studioを使いこなしたいはじめてC#を書くにあたってC#の概要を知りたいはじめてC#に触れる人がこの本を読むのはちょっとしんどいと思いました。C#経験が少ない人のことも意識されてますが、網羅的かつ詳細に説明されているだけに、どれも大事なことのように思えて読み終わらなさそうです。優先度の甲乙がつけがたい。(MSDNプログラミングシリーズ)C逆引きレシピXamarin本一通りあとC#本何冊か部分部分読みました。(マイクロソフト公式解説書)特徴的なところ・いいなと思ったところ似た使い方をする構文の違いの説明が詳しいジャグ配列と多次元配列のLengthの違い==とEqualsの違い&と&&の違いRegexのインスタンスメソッドとクラスメソッドの違いreadonlyとconstの違いFile/DirectoryとFileInfo/DirectoryInfoの違い値型の値渡し、参照型の値渡し、値型の参照渡し、参照型の参照渡しの違いListとLinkedListの使い分けLINQのクエリ構文とメソッド構文の違い匿名型とタプルの用途の違いinterfaceと抽象クラスの使い分けDynamicObject、ExpandoObjectの使い分け本文中で説明されているものもあれば、「エキスパートに訊く」という特設コーナーでQA形式で説明されているものもあってとても勉強になりました。自明なものとして表立って説明されることはなかったり省かれたりすることが多いけど概念的に大事なことを一言で言い表した上でC#の実装や図表と合わせて説明されているサロゲートペアバッファーコレクションスタックキューセットディクショナリ、マップ、ハッシュ、連想配列ジェネリックアセンブリストリームシグニチャスレッドプロセスラムダ式登場の経緯デリゲート型にをより簡素に書くためにラムダ式が登場した背景が具体的なコードと共に説明された上で、ラムダ式をよく使うLINQの説明がなされていてとても頭に入ってきやすかったです。この部分に限らず、全体的に単に使い方だけでなく構文登場の背景や、以前のC#バージョンではこう書いていたが今はこう書けるので今後はこう書いていくべきのようにC#をとりまく歴史の中で説明されているので頭がスッキリしました。章毎に理解度を確認するための問題がついています。コードを書く以外の問題(◯×問題)を掲載するので、試しに確認してみてください。答えが気になる方は是非本でどうぞ!※章途中の小問題もけっこうあるのでここに掲載する倍以上の問題とその解説が載っています。1章C#の特徴を「マルチパラダイム」「マルチプラットフォーム」というキーワードを絡めて説明してみましょう。C#アプリは、どのメソッドから実行されますか。そのようなメソッドのことをなんと呼ぶでしょうか。文の末尾を示す記号を答えてください。C#で使えるコメントの記法をくべて挙げてください。これらのコメントの違いを説明してください。次の文章は、C#の基本構文について述べたものです。正しいものには◯、間違っているものには×を記入してください。)小数点型は、符号なし型と符合あり型とに分類できる。)文字列リテラルはダブルクオート、またはシングルクオートでくくる。)メソッド/フィールドなどにアクセスするには、必ずnew演算子でクラスをインスタンス化しなければならない。3章(省略)4章(省略)5章(省略)6章この文章は、コレクションについて説明したものです。正しいものには◯、誤っているものには×を付けてください。)Listへの挿入/削除は、位置に関わらずほぼ一定のスピードで可能です。)LinkedListへの挿入/削除では要素前後のリンクの付け替えが発生するので、比較的低速である。)HashSetは要素の重複を許さず、一意の値を決められた順序で保持します。)Dictionaryは一意のキーと値のペアでデータを管理します。キーの並び順は保証されません。)Stackは先入れ先出し、Queueは後入れ先出しと呼ばれるデータ構造です。以下はオブジェクト指向の主要なキーワードについて説明したものです。正しいものには◯、誤っているものには×を付けてください。)フィールド/メソッドは外部から呼び出すことが前提の仕組みなので、アクセス修飾子も既定はpublicである。)forループで宣言されたカウンター変数は登場以降、そのメソッドの内部であればアクセス可能である。)匿名型はその場限りであれば、引数や戻り値の型として利用することが可能である。以下の文章はオブジェクト指向構文について説明したものです。正しいものには◯、誤っているものには×を付けてください。)派生クラスから基底クラスのコンストラクターを呼び出すには、superキーワードを利用する。)virtual修飾子のないメソッドを、派生クラスで再定義することはできない。)override修飾子のないメソッドに、sealed修飾子を付けることはできない。)as演算子は左オペランドが右オペランドの方に変換できる場合にtrueを返す。)インターフェイスを複数実装することはできるが、クラスと一緒に実装/継承することはできない。以下の文章は本章で学んだ機能について説明したものです。正しいものには◯、誤っているものには×を付けてください。)catchブロックは、ブロックで指定された例外と発生した例外とが一致した場合にだけ実行される。)構造体では、継承は可能だが、インターフェイスの実装はできない。)列挙定数の型は、任意の数値型から選択できる。)演算子のオーバーライドという機能を利用することで、「+」「-」「==」のような演算子をクラス独自に再定義できる。以下の文章は、デリゲート/ラムダ式/LINQについて述べたものです。正しいものには◯、誤っているものには×を付けてください。)引数にメソッドを引き渡すような用途では、ラムダ式よりも匿名メソッドを利用すべきである。)ラムダ式で引数がない場合には、「=>式」のように引数そのものを省略できる。)LINQのクエリ構文は、メソッド構文でできることであれば必ず表現できる。)LINQでは、与えられたデータソースによってプロバイダーを決定するので、アプリ開発者がプロバイダーを意識する必要はない。)LINQのクエリ構文は必ずselect句で終了しなければならない。以下の文章は本章で解説したテーマニついて説明したものです。正しいものには◯、誤っているものには×を付けてください。)スレッドを維持しておくのはリソースの浪費なので、できるだけその場その場で解放するのが望ましい。)await演算子は、指定された非同期処理の終了を待ってメインスレッドを待機させる。)属性によって適用できる要素は決まっている。)dynamic型では、存在しないメンバーを呼び出してもエラーにはならない。)イベントを登録するには、「=」演算子を利用する。