文章出處
文章列表
類和接口繼承
CLR和C#編譯器允許類繼承一個或者多個接口,但必須為繼承的接口提供方法的實現
定義接口
關鍵字interface
,已I
字母開頭;不許接口定義靜態成員;接口成員可以是屬性、索引器、事件、方法
泛型接口
- 泛型接口提供了編譯時的安全性
- 減少值類型的裝箱
- 類可以實現同一接口若干次
class Number:IComparable<int>,IComparable<string>
{
public int CompareTo(int other)
{
throw new NotImplementedException();
}
public int CompareTo(string other)
{
throw new NotImplementedException();
}
}
泛型和接口約束
可以將一個泛型類型參數約束為多個接口,傳遞的參數類型必須實現所有接口的約束
public static int Max<T>(T t) where T : IComparable, IConvertible
{
return 0;//other result
}
實現多個具有相同方法名和簽名的接口
public interface IWindow {
void GetMenu();
}
public interface IRestaurant
{
void GetMenu();
}
class Number : IWindow, IRestaurant
{
//顯示實現接口,在調用的時候必須將對象轉成對應的接口類型
void IWindow.GetMenu()
{
throw new NotImplementedException();
}
void IRestaurant.GetMenu()
{
throw new NotImplementedException();
}
}
用顯式接口方法實現來增強編譯時類型的安全性
謹慎使用顯式接口方法實現
設計:基類還是接口
- IS-A VS CAN-DO關系 如果類之間是IS-A的關系,建議使用繼承基類,如果是CAN-DO建議是繼承接口
- 版本控制問題 向基類添加新的方法,派生類將繼承新方法,代碼能正常工作甚至不需要編譯代碼;但是接口增加新的方法,派生類必須實現新的接口,必須要編譯代碼
文章列表
全站熱搜