1.Parameter 設計原則
2.Enum vs Boolean
3.驗證參數的exception
3.Parameter Pasing
4.傳入的參數數量不確定時
Parameter是只傳入方法或建構子的值
也是命名規則中為一 Camel Casing的
盡量使用原始型態的Parameter
這裡不是指int, string這類的
而是說當有繼承或實做的關係時,傳入的參數型態盡量為上層型態
例如,使用IEnumerable,而非ArrayList或IList
不要加上沒有用途的Parameter,做為以後預備用的之類的
基本上整段書都在講,不要未雨綢繆的多寫一些自以為未來會用到的東西預備著
如果未來有需要的話,建議overload
public struct DateTimeOffSet{
public static bool TryParse(string input, out DateTimeOffSet result);
}
public interface IComparable<T>{
int CompareTo(T other);
}
public class Nullable<T> : IComparable<Nullable<T>>{
public int CompareTo(Nullable<T> other){...}
}
前面有提到當狀態只有兩種時,通常會用Boolean表示
ture代表可以....
false代表不可以....
但如果要增加程式碼的可讀性,可以考慮用Enum表示
那到底甚麼時候適合Enum,甚麼時候適合Boolean呢??
// 兩個boolean參數,不易判斷前後各代表甚麼意思
Stream stream = File.Open("foo.txt",true,false);
// 增加可讀性
Stream stream = File.Open("foo.txt", CasingOptions.CaseSensitive, FileMode.Open);
傳入的參數如果不符合規定
之前我愚蠢的做法是會另開一個新的exception來說明這個參數哪裡出問題了
但是讀了這本書之後才發現,其實原生exception就足夠用來表達了
而且因為是默認的規則,大家都會知道問題是出在是傳入的參數
如果要自己寫新的Exception的話,請繼承System.ArgumentException
1.因為傳入Null而出錯的話,請throw ArgumentNullException
2.因為傳入的Enum範圍出錯的話,請thorw ArguemntOutOfRangeException
3.不要使用Enum.IsDefined來檢查範圍
參數又分為三種
大部分的情況都是第一種-by-value
使用方法是copy一份參數內容給需要的方法,不會影響到原來呼叫時的值
ref parameters跟out parameters則是傳址,會影響到原來的值
但是使用out parameters時一定要在return前修改參數內容
1.不過書中的建議是請大家不要使用ref parameters跟out parameters
除非你非常知道他的運作方式為何
2.使用ref parameters時,不要assign給另一個ref parameters
也就是在最後一個參數使用陣列
以下面常用的String.Format來說
不確定到底有多少個{0}....{n}將被取代時
最後一個參數parameters使用陣列傳入
public class String{
public static string Format(string format, object[] parameters);
}
在Java來說的話就是..
public class String{
public static string Format(string format, object.. parameters);
}
使用上可以直接給一個string array,也可以在後面一直加上object
string.Format("File {0} not found in {1},new object[]{filename, directory});
string.Format("File {0} not found in {1},filename, directory);