[问题] 请问如何将类别作为引数传递?

楼主: 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