iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 13
0
自我挑戰組

Framework 設計原則系列 第 13

Member 設計原則(2) - Property

  • 分享至 

  • xImage
  •  

本文重點

1.Property設計原則
2.Indexed Property設計原則
3.Property異動事件


Property設計原則

今天介紹Property使用上要注意的事項

1.當你的不提供修改時,建立get-only property
2.但是不要建立set-only property
3.為你的property提供一個不會影響系統的預設值
4.set value出錯時,回復之前的值
5.避免再get中丟出exception

Indexed Property

我用下列書中的例子說明一下甚麼是Indexed Property

public class String{
    public char this[int index]{
        get{...}
    }
}
...

string city = "Seattle";
Console.WriteLine(city[0]); //印出'S'

顯然的,Indexed Property只能被用在Collenction中
用來表式第index個元素

然而,在使用的時候必須很小心,可能一不小心就無窮迴圈了

以下是書中提到的注意事項

  1. 提供內部array時可以考慮使用
  2. 想要提供collection中的元素(item)時也可以考慮使用這個方法
  3. 超過一個參數時,不要用Indexed Property
  4. 不要同時提供Indexed Property跟Method,下面是錯誤範例
public class Type{
    public MemberInfo this[string memberName]{...}
    public MemberInfo GetMember(string memberName, Boolean ignoreCase){...}
}

Property異動事件

提供Property異動通知,似乎是一個不錯的idea

雖然我沒有真的做過這件事

使用方法如下

public event EventHandler<EventArgs> TextChanged;

public string Text{
    get { return text;}
    set {
        if(text!=value){
            text = value;
            OnTextChange();
        }
    }
}

protected virtual void OnTextChange(){
    EventHandler<EventArgs> handler = TextChanged;
    if(handler!=null){
        handler(this,EventArgs.Empty);
    }
}

上一篇
Member Design(1) - 共通原則
下一篇
Member Design(3) - Constructor
系列文
Framework 設計原則30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言