過了一個週末,整個想拖搞
今天先從比較簡單的Member Design重新開始吧
Member是Type中的成員,包括Methods, Properties, Fields等
今天先介紹Member Design的共通規則
日後在針對不同的Member做介紹
首先是關於Overload的部份要注意的事項
Overload只名稱一樣,但參數不一樣的方法
只有方法,建構子跟indexed properties可以Overload
public static class Console{
public void WriteLine();
public void WriteLine(string value);
public void WriteLine(bool value);
}
使用Overload的注意事項如下
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方法時,你是否注意到有兩種實作方式如下
當選擇【實作介面】時會產生程式如下
public void PersonSkill()
{
throw new NotImplementedException();
}
選擇【以明確方式實作介面】時會產生程式如下
void ISkill.PersonSkill()
{
throw new NotImplementedException();
}
以明確方式實作介面時,必須確實宣告物件為該介面,才能使用方法
// 呼叫方式如下
ISkill lafu = new Dog();
lafu.PersonSkill(); //來福的個人技
// 這樣會出錯
Dog lafu = new Dog();
lafu.PersonSkill(); //來福的個人技
使用Proterty的情況
1.代表一種屬性時(attribute)
使用Method的情況
1.需要轉變時
ex: ToString()
2.每次回傳的值都不一樣時
ex: Guid.NewGuid
3.回傳一個array時