Microsoft TechEd Yokohama 2007 総括(2) C#3.0 編 BearCatのモバイルと音楽のある生活

Microsoft TechEd Yokohama 2007 総括(2) C#3.0 編のページです。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--年--月--日 トラックバック(-) コメント(-)

Microsoft TechEd Yokohama 2007 総括(2) C#3.0 編

Microsoft Tech・Ed Yokohama 2007
開発言語の仕様としては、VB.NET 関連のセッションを受けていないため、C# についてしか語れませんが、それでも気になるところはいくつかありました。

LINQ に最適化するために言語仕様を拡張したと思われる部分が多く、ここでもキーワードは LINQ という気がします。

■クエリ式

C# での LINQ の実装そのものです。
構文は前回書いたので、ここで改めては触れません。

■自動実装プロパティについて。


// C# 2.0
private string _description;
public string Description
{
    get return _description;
    set _description = value;
}

// C# 3.0
public string Description { get ; set; }

確かに楽ですね。プロトタイプ的なプログラムを書く場合は、多用しそうです。また、入力チェックと初期化が不要なプロパティでも使えそうです。
楽をしようと思って『public string Description;』なんてお馬鹿な書き方をするプログラマを減らせるかな。

■ローカル変数の型推論について。


// C# 2.0
System.Text.StringBuilder buf = new System.Text.StringBuilder();
// C# 3.0
var buf = new System.Text.StringBuilder();

別のセッションでサンプルソース見た時、C# のところに JavaScript 書いてやがるよ...と苦笑いしてしまいましたが、間違いではありませんでした。すいません。
型宣言に『var』と書いてやると、コンパイラが代入する型から自動的に型を判別するそうで、同じ型を二度書かなくてすむというのがメリットです。

できるだけ私は使わないと思います。
だって、型宣言がきちんと書かれていないと、コードの可読性が下がるでしょ?
ケースとしては少ないですが、すぐに初期化しないような場合は代入するところを探さなければならないし、それを避けるために初期化しない場合だけ明示的な型宣言をするのであれば一貫性が失われるし。
第一、Visual Studio を使っていれば IntelliSense が効くので、入力の手間は問題になりません。
LINQ で検索結果を取得する場合に必要となるケースは考えられます。

■匿名型

LINQ の実装から必要になったのではないかと思われる型です。
LINQ to SQL で集計結果を取得する場合などで、取得結果に明示的な型宣言が必要だとすると生産性が低下します。あらかじめ取得結果に応じたクラスを作成する必要がありますからね。

■オブジェクト イニシャライザ、コレクション初期化子について。

名前の通りです。
C# には、VB.NET の With 構文に相当するものがありません。
オブジェクト インスタンスを生成する際にプロパティをまとめて指定できたり、コレクションのメンバを一括して追加できると、開発生産性が少し向上する気がします。
オブジェクト イニシャライザのコードは以下のような感じ。

var company = new Company{Id=0, Name="Microsoft", Zip="xxxx-xx", Address="...."}



■ラムダ式

匿名メソッドをより簡単に記述する方法です。

// C# 2.0
delegate(int a, int b)
{
    return a + b;
}

// C# 3.0
x => a + b;

LINQ のデモで多用していました。やはり、LINQ の記述を簡略化するために採用したのでしょうか。

■拡張メソッド

既存のクラスにメソッドを追加するという、オブジェクト指向の概念から逸脱しているような言語機能です。というより掟破りのような気が...。
ただ、継承を許可していない(sealed)クラスに対してメソッドを追加できるのであれば、使える局面が出てくるのではないかと密かに期待しています。


まだ、β版での話なので、今後仕様が変更される可能性があります。
また、これらがC# の言語機能の拡張全てではありませんので念のため。

スポンサーサイト

2007年08月27日 トラックバック(0) コメント(0)












管理者にだけ公開する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。