iT邦幫忙

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

Framework 設計原則系列 第 12

Member Design(1) - 共通原則

  • 分享至 

  • xImage
  •  

本文重點

  1. Overlaod注意事項
  2. 明確實作介面
  3. Properties與Methods該如何選擇

過了一個週末,整個想拖搞

今天先從比較簡單的Member Design重新開始吧

Member是Type中的成員,包括Methods, Properties, Fields等

今天先介紹Member Design的共通規則

日後在針對不同的Member做介紹

首先是關於Overload的部份要注意的事項

Member Overloading

Overload只名稱一樣,但參數不一樣的方法

只有方法,建構子跟indexed properties可以Overload

public static class Console{
    public void WriteLine();
    public void WriteLine(string value);
    public void WriteLine(bool value);
}

使用Overload的注意事項如下

  1. 參數較少的Member,其Member名稱要能夠表示他的預設條件
pbulic class Type{
    public MethodInfo GetMethod(string name); //ignoreCase = false
    public MethodInfo GetMethod(string name, Boolean ingoreCase);
}

2.每個Member同一個參數名稱要一樣

pbulic class Type{
    public MethodInfo GetMethod(string name); //ignoreCase = false
    
    //Good
    public MethodInfo GetMethod(string name, Boolean ingoreCase);
    
     //Bad
    public MethodInfo GetMethod(string value, Boolean ingoreCase);
}

3.只能在參數最多的Member加上virtural,讓其他人overwirte

因為短的會去呼叫長的,所以最後的邏輯程式會寫在參數最多的Member中

4.不用使用ref or out

public class SomType{
    // DO NOT
    public void Somethod(out string name){...}
}

5.意思不一樣的方法不要Overload

應該要連名稱都不一樣,而不是用Overload

6.不是必要的參數,允許null傳入

因為短的要去呼叫長的,要在程式裡做傳入的判斷,如果是null...就...

if(geometry == null) DrawGeometry(brush, pen);
else DrasGeometry(brush, pen, geometry);

明確實作介面

沒有實作interface方法時,你是否注意到有兩種實作方式如下
http://ithelp.ithome.com.tw/upload/images/20170105/20091485PBuS1sANHh.png

當選擇【實作介面】時會產生程式如下

public void PersonSkill()
{
    throw new NotImplementedException();
}

選擇【以明確方式實作介面】時會產生程式如下

void ISkill.PersonSkill()
{
    throw new NotImplementedException();
}

以明確方式實作介面時,必須確實宣告物件為該介面,才能使用方法

// 呼叫方式如下
ISkill lafu = new Dog();
lafu.PersonSkill(); //來福的個人技

// 這樣會出錯
Dog lafu = new Dog();
lafu.PersonSkill(); //來福的個人技

Properties與Methods該如何選擇

使用Proterty的情況
1.代表一種屬性時(attribute)

使用Method的情況
1.需要轉變時

ex: ToString()
2.每次回傳的值都不一樣時
ex: Guid.NewGuid
3.回傳一個array時


上一篇
Types 設計原則(6) - Refrence Type VS Value Type
下一篇
Member 設計原則(2) - Property
系列文
Framework 設計原則30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言