[C#]利用介面實現多型性淺析
阿新 • • 發佈:2019-01-26
所謂的多型性,個人認為說的是相同的程式接受幾段毫不相同的引數而能正常的執行。而在C#中利用介面實現多型性我覺得並不是太嚴謹。我認為要真正實現多型性離不開泛型。
舉個小例子:
public interface Iinter { public void SetA(string a); public void SetB(string b); } public class Cmyclassa : Iinter { string a, b; public void SetA(string a) { this.a = a; } public void SetB(string b) { this.b = b; } } public class Cmyclassb : Iinter { string a = "a", b = "b"; public void SetA(string a) { Console.WriteLine(a); } public void SetB(string b) { Console.WriteLine(b); } }
我定義了一個介面 Iinter 有兩個類繼承了這個介面,在這兩個類裡分別對接口裡已宣告的方法做了實現。這麼做說是實現了多型性,但是這接口裡方法的宣告在每個類裡實現是不一樣的,並不是說一段相同的程式對不同的引數做了不同的處理,因為在接口裡方法的簽名是沒法修改的。
如果說把方法的形參改成object型別,能勉強說是用了多型性把,畢竟我覺得多型是指的一段程式能順利的接受並分析不同使用者輸入的不同程式碼。
個人人為如果在宣告方法的時候能用上泛型和object型別才能算作是真正的多型,這樣一個方法解可以獲取各種各樣的引數了。就像一樣 Console.WriteLine()一樣,WriteLine這個方法大家可以看看它的方法原型,其中有一項是這麼寫的:
public static void WriteLine(string format, params object[] arg);
這是元資料裡面WriteLine的一個,大家想想在用的時候有沒有這麼寫過:
nt myint = 10; double mydou = 10.00; float myflo = 11.11F; decimal mydec = 10.0m; string mystr = "I'm Hsppl"; Console.WriteLine("{0},{1},{2},{3},{4}",myint,mydou,myflo,mydec,mystr); Console.WriteLine("{0},{1},{2},{3}",myint,mydou,myflo,mydec);
他們的型別不一樣,而且如果形參的數量也不一樣,這才是真正的多型。
PS:這僅僅是個人小小的愚昧見解,請大家批評指正~~