菊池 Blog

移転しました 続・菊池 和彦の足跡

AILight Banner
AILight Blog

プロフィール

菊池 Blog

目次

Blog 利用状況

記事分類

過去の記事

タグ

publicな読み取り専用の何か

[C#]自動プロパティってどうでしょう より

読み取り専用プロパティ

  1. public readonly int Width; // コンストラクタで初期化
  2. public int Width { get; private set; }
  3. public int Width { get { return なにがし; } }

これも2 → 3です。1は無い。
1を使う場合は定数として定義する時位かなぁ。
読み取り専用プロパティとは区別して使いそう。

1はプロパティでなくてフィールドです(は些細な事)ので public な読み取り専用の何かという事で書くと、自分は以下の順序で使います。

public const int Width=XXX;

定数こそ最強。

public readonly int Width;

アクセサを導入する目的ってのは「状態を管理する必要があるから」なわけで readonly であるという事はコンストラクタでの初期化後は変化せずに安定して使えるという事を表明しているわけで、アクセサは不要なのです。

public readonly int Width;
public int WidthProperty { get { return Width; } }

メタデータ的にプロパティが無いと困る誰かさんが居る場合にこういう書き方をする事もある。

メタデータ的に困る人が居るというケースでは定数にプロパティを作ってあげる事もある。

private int _width;
public int Width { get { return _width; } private set { _width=value; } }

この宣言はプロパティの利用者に対して「Widthはお前の知らん所で書き換えられる事もある、覚悟して使えよ!!」って言う意味もあるので、使う側としては const や readonlyフィールドよりは嫌な存在(しかし最も多いパターンである)

 

どちらにしても、自分が何をしているのかを正しく理解している人であれば正しい選択ができると思います。

投稿日時 : 2008年4月25日 10:16


コメントを追加

タイトル
名前
URL
コメント