建議127:用形容詞組給接口命名
接口規範的是“Can do”,也就是說,它規範的是類型可以具有哪些行爲。所以,接口的命名應該是一個形容詞,如:
IDisposable表示可以被釋放
IEnumerable表示類型含有Items,可以被迭代。
正是因爲接口表示的是類型的行爲,所以從語義上可以讓類型繼承多個接口,如:
class SampleClass : IDisposable, IEnumerable<SampleClass> { //省略 #region 實現IDisposable public void Dispose() { throw new NotImplementedException(); } #endregion #region 實現IEnumerable public IEnumerator<SampleClass> GetEnumerator() { throw new NotImplementedException(); } IEnumerator IEnumerable.GetEnumerator() { throw new NotImplementedException(); } #endregion }
以上代碼看起來覺得符合語法,又符合語義。如果我們將接口命名爲IDisposal,這給人造成的誤解是:該類型是一個類,而不是接口,雖然我們在前面加了前綴I,但仍然感覺這是符合語義的。
然而,FCL中也有一些違反此規定的例外,比如IEnumerator接口。但是,這種情況相對來說還是比較少的,在大多數情況下,我們需要始終考慮用形容詞來爲接口命名。
轉自:《編寫高質量代碼改善C#程序的157個建議》陸敏技