このページの記事一覧

2011年2月26日土曜日

EffectiveC# と EffectiveC# 4.0 の比較

先日EffectiveC#の改訂版であるEffectiveC# 4.0を購入しました。

EffectiveC#は日本語翻訳版は2009年出版ですが原文はまだ.NET Frameworkが1.0の頃に書かれたものでやはり情報が古いです(つまりジェネリクスすらない時代)。

.NET Frameworkもバージョンが上がる中でジェネリクスのサポートやラムダ式、LINQ、動的プログラミングなどその他もろもろ進化をしています。

EffectiveC# 4.0はそういった機能にも対応したEffectiveC#の第2版に当たります。

そんなわけで、改定前と改訂版でどの項目に変更が入ったのか、簡単にまとめておきます。

 

EffectveC#から削除された項目

  1. 項目11 foreachループを使用すること
  2. 項目24 命令型プログラミングよりも宣言型プログラミングを選択する
  3. 項目36 .NETランタイムの診断機能を活用する
  4. 項目37 標準の設定メカニズムを使用すること
  5. 項目38 データバインドを活用およびサポートすること
  6. 項目39 .NETの検証機能を使用すること
  7. 項目40 ニーズに一致したコレクションを用意すること
  8. 項目41 独自のデータ構造よりもDataSetを利用する
  9. 項目42 リフレクションを単純化するために属性を活用する
  10. 項目43 リフレクションを使用しすぎないこと
  11. 項目46 相互運用を最小限にすること
  12. 項目48 ツールとリソースについて学ぶ
  13. 項目49 C# 2.0への準備
  14. 項目50 ECMA標準について学ぶ

 

EffectiveC# 4.0に追加された項目

  1. 項目8 ループの代わりにクエリ構文を使用すること
  2. 項目10 メソッドのオーバーロードを最小限にするよう、オプション引数を使用する
  3. 項目29 ジェネリックの共変性と反変性をサポートする
  4. 項目34 基本クラスに定義されたメソッドをオーバーロードしないこと
  5. 項目35 PLINQが並列アルゴリズムを実装する方法
  6. 項目36 I/Oのコストが高い処理に対してPLINQを使用する方法
  7. 項目37 例外を考慮した並列アルゴリズムを構成すること
  8. 項目38 dynamicの利点と欠点を把握する
  9. 項目39 ジェネリック型引数の実行時型を活用するためにdynamicを使用する
  10. 項目40 匿名型を引数にとれるようdynamicを使用する
  11. 項目41 DynamicObjectあるいはIDynamicMetaObjectProviderを使用してデータ駆動のdynamic型を作成する
  12. 項目42 Expression APIを活用する方法を把握する
  13. 項目43 式を利用して事前バインディングを遅延バインディングに切り替える
  14. 項目44 公開するAPIでは動的オブジェクトを最小限に抑えること

その他の36項目についても加筆修正が加わり、ソースコードも最新版に変更されています。

例えばEffectiveC#では

   1: public class Customer
   2: {
   3:     private string _name;
   4:     public virtual string Name
   5:     {
   6:         get { return _name; }
   7:         set { _name = value; }
   8:     }
   9: }

と書かれていたプログラムはEffectiveC# 4.0では



   1: public class Customer
   2: {
   3:     public virtual string Name
   4:     {
   5:         get;
   6:         set;
   7:     }
   8: }


と変更されています。


 


なお、以下の12項目については項目名が変更されていますが、扱っている内容は同じになります。



  1. 項目6 さまざまな同値性メソッドの関係を把握する(旧項目9 ReferenceEquals()とstaticメソッドのEquals()、インスタンスメソッドのEquals()、等号演算子==の関係を把握する)
  2. 項目9 独自のAPIでは変換演算子を定義しないこと(旧項目28 変換演算子は使用しないこと)
  3. 項目12 割り当て演算子よりもメンバ初期化子を使用すること(旧項目12 割り当て演算子よりも変数初期化子を使用すること)
  4. 項目13 staticメンバは適切に初期化する(旧項目13 staticメンバはstaticコンストラクタで初期化する)
  5. 項目14 初期化ロジックの重複を最小化する(旧項目14 コンストラクタの連鎖を活用する)
  6. 項目16 不必要なオブジェクトの生成を避けること(旧項目16 ゴミの量を最小限抑えること)
  7. 項目23 インターフェイスメソッドと仮想メソッドの違いを理解する(旧項目20 インターフェイスを実装することと仮想関数をオーバーライドすることの違い)
  8. 項目25 イベントパターンの実装により通知を行うこと(旧項目22 イベントにより発信インターフェイスを定義する)
  9. 項目28 粒度の粗いインターネットサービスAPIを作成する(旧項目34 粒度の粗いWeb APIを作成する)
  10. 項目31 IComparable<T>とIComparer<T>を実装して順序関係をサポートする(旧項目26 IComparableとIComparerを実装して順序関係をサポートする)
  11. 項目33 親クラスの変更に応じる場合のみ修飾子を使用すること(旧項目29 親クラスの変更による指示がない限りnew修飾子は使用しないこと)
  12. 項目48 安全なコードを採用すること(旧項目47 安全なコードを選ぶ)

2011年2月24日木曜日

カテゴリテスト

一応Live Writerでカテゴリ設定できるんだけど、

Blogger上でどう反映されるのかテスト。

   1: Module Module1
   2:     Sub Main()
   3:         Console.WriteLine("Hello, Category")
   4:     End Sub
   5: End Module

最初の投稿

Windows Live Writerを使っての投稿テスト。

普通にWord感覚で作れてかなり便利じゃない?

地図の挿入とか、

地図画像

テーブルも簡単簡単。

001 aaa 000
002 bbb 111
003 ccc 222

 

プログラムコードもプラグインでいい感じだー

   1: public class FirstBlog {
   2:     public static void main(String[] args) {
   3:         System.out.println("Hello, Blogger!!");
   4:     }
   5: }

そんなわけで不定期更新していけたらいいな。