[問題] 請問如何將類別作為引數傳遞?

作者: berice152233 (WASHI買的zenfone2)   2019-12-21 11:52:10
各位學長好
最近有個想法但做不出來
大概就像是這樣:
https://dotnetfiddle.net/GUu7pe
Toyota Mazda Ford
這三個不同名稱的類別中
都有一個名為Car的方法
在類別Test中
有一個SetPrice的方法
我想要將Toyota Mazda Ford這三個類別
作為引數引入SetPrice中
並且不希望動到方法SetPrice的內容
依照例子裏面的寫法
如果要將Toyota變更為Mazda
那麼就得變更引數的型別
SetPrice(new Mazda());//這邊可以變沒關係
void SetPrice(Mazda Maker)//方法不希望變更
{
Maker.Car();
Console.WriteLine(Taiwan.Price);
}
有嘗試自己上網找一些方法
但可能是不得要點,找出來大多不是我要的
請各位學長不吝賜教,感謝
作者: testPtt (測試)   2019-12-21 12:44:00
一個字都不變的話就是重寫一個class如果你是要void SetPrice(T Maker):where T:xx{}那就這樣裡面還是要轉型的動作Maker.Car()用delegate呢
作者: samchung (不是咖啡店小開XD)   2019-12-21 14:54:00
改成介面+多型的寫法 https://dotnetfiddle.net/l9b2mG但會改到 SetPrice 的參數型別,各車種也要繼承此介面其實泛型的做法 1F 就有提過了,我只是順便寫出來 XD
作者: jass970991 (半糖綠假面超人)   2019-12-22 15:54:00
看不是很懂 感覺你只是需要interface
作者: ssccg (23)   2019-12-25 09:55:00
因為new就不是一般OOP繼承時的行為,是定義同名方法隱藏父類中的方法,virtual才是比較常見的OOP行為很多其他OOP語言裡方法預設就是virtual,沒有new這種功能
作者: zenuo (堅持到底永不放棄)   2019-12-26 15:39:00
用interface 在個別實作三個類別

Links booklink

Contact Us: admin [ a t ] ucptt.com