以前から作りたいと思っていたプログラム(+Web サービス)が意外に簡単にできそうなことが判明したので、トライしてみることにしました。

作りたいプログラムは C# で作られたソフトウェアのプラグインなので、まずは C# のお勉強です。

C# は過去に何回か大きな進化があった、という知識だけはあったので、できるだけ新しい本で勉強したいところ。ちょっと調べてみると、他言語習得済みのプログラマに好評な本がありました。

猫でもわかるC#プログラミング 第3版    
粂井 康孝 (著) / SBクリエイティブ    
3版 (2016/2/27)    
https://www.amazon.co.jp/C-3-ebook/dp/B01C804DL6/

初めてマンガ以外の電子書籍を買いました。しかも Kindle です。タブレットは持っていないので PC で読むわけですが、本当に長文を読めるのか、かなり不安でした。

結果、あっさり読めました。

読むスピードも紙媒体に比べて特に遅いという印象はありませんでした。まぁ、内容が簡単だった、ということもあるかもしれませんが。

以下、感想。

本書は、プログラミング初心者にはちょっと厳しい本かもしれません。オブジェクト指向言語の基本概念やインタフェースの存在意義などの詳しい説明は無く、ほぼ構文のみの説明になっています。 Java か C++ あたりの知識がないとたぶん理解できません。逆に言うと、他言語習得済みのプログラマには便利だと思います。

とりあえず本書で概要を把握して、あとはリファレンス本で詳細を学ぶのが早そう。

C# についての印象:

  • オーバーライドの構文が不自然。 newoverridevirtual の必要性が不明。 C++ の virtual は関数呼び出しオーバヘッドの削減のためと認識していますが、 C# に果たしてそこまでの性能追求が必要なのか疑問。逆に sealed って書かせたほうが統一感があってよかったのでは?
  • 複数のインタフェースを継承したとき同じシグネチャのメソッドがあると、それぞれのインタフェースに対して実装を書かないといけないのがよくわからない。あるクラスのあるシグネチャのメソッドは、単一の機能を持つべきではないの?
  • switch 文が fall through 禁止なのに break 文が必須なのが意味不明。
  • ビット演算子の優先順位が低い。C言語の悪いところをマネしなくていいのに・・・。
  • checked / unchecked 機能はちょっとうれしいかも。
  • ジェネリックの反変性がよく理解できなかった。要調査。

とりあえず C# の概要はわかったので、 Visual Studio 2015 をインストールして遊んでみるつもりです。