Daigo Hamura's Weblog

Developers Summit Demo Script – Part III

今回ですでにPart IIIとなるデブサミ スクリプトシリーズです。今日は自動実装 プロパティです。

 

C# 3.0 のデザイン最終段階で追加されたこの新しい構文は、デブサミでも触れましたが、v1 の頃からの Feedback の一つです。予想したよりも反響が大きく多くのお客さんに喜んでいただけたこと、また何でこんな事ができないんだという嬉しい Feedback もいただいています。C# のデザイン哲学、keep it simple!  Simpleな事はエレガントであり理解しやすい、と同時に機能を付け足すのは簡単でも取り除くのは不可能だからです。このような言語のデザインの裏話を書いても楽しいのですが、本題のほうに戻ります。

 

C# 2.0 のコード

public class Product

{

    private int productID;

    public int ProductID

    {

        get { return productID; }

        set { productID = value; }

    }

     

}

 

C# 3.0 を使って書き換えると。

public class Product

{

    public int ProductID { get; set; }

 

}

違いとしては、productIDfieldget/setbodyがセミコロンに置き換わっています。

 

いつものようにここで、サンプルを修正してもいいのですが、今日はちょっとアカデミックにグラマーを見てみましょう。C# 3.0 の言語仕様によると、

property-declaration:
attributesopt   property-modifiersopt   type   member-name  
{   accessor-declarations   }

ここで重要なのはaccessor-declarations   でグラマーは

accessor-declarations:
get-accessor-declaration   set-accessor-declarationopt
set-accessor-declaration   get-accessor-declarationopt

get-accessor-declaration:
attributesopt   accessor-modifieropt    
get   accessor-body

set-accessor-declaration:
attributesopt   accessor-modifieropt  
set   accessor-body

accessor-modifier:
protected
internal
private
protected
   internal
internal
   protected

accessor-body:
block
;

じつは、グラマーはC# 2.0 から修正はまったくありません。これは、あるセッションで話した互換性の問題と深く関連していて、このように言語仕様の隙間を見つけて、Semanticの修正のみ(Parser には手を入れない)で新たな機能を付け加えることは多くあります。

 

では、デモコードに戻り、いつもの様にdefault.aspx.csを開いてpublic class Product を以下のコードに書き換えてください。

public class Product

{

    public int ProductID { get; set; }

    public int CategoryID { get; set; }

    public string ProductName { get; set; }

    public decimal UnitPrice { get; set; }

}

 

F5で前回までの変更と今日の修正が実行できることを確認してください。これまで3回の変更でコードのreadabilityがかなり向上したかと思います。明日からは、LINQを使ってQueryをかけていきます。

 

Published Thursday, March 06, 2008 11:52 AM by daigoh
Filed under:

Comments

No Comments
Anonymous comments are disabled

© 2009 Microsoft Corporation. All rights reserved. Terms of Use  |  Trademarks  |  Privacy Statement
Microsoft
Page view tracker