![]() |
1
2
这是实现这一目标的一种方法:
|
![]() |
2
3
那么你应该声明一个接口
编辑:
|
![]() |
3
2
我找到了两种可能对你有帮助的方法。 它可能看起来像(我不是VB.Net程序员,所以可能有一些错误):
当然这意味着您需要在调用之前知道myVehicle对象的确切类型
SetFlat函数。同时,SetFlat只能与具有isflated属性的类一起调用。
有关VB.Net中泛型的更多详细信息:
第二个(脏)解决方案是使用.Net反射来检测myVehicle对象是否包含IsFlatbed属性。您可以在以下方面找到更多详细信息:
|
![]() |
4
2
我决定启动Visual Studio并进行一些测试,因为我对其他答案的评论可能没有多大意义。假设您有以下类:
您还可以在另一个类中使用以下方法:
所以,这可以让你随心所欲地绕过一个车辆对象,因为直到运行时,你才知道你要处理的具体车辆类型(汽车或卡车)。SetFlat方法可以在运行时确定它通过了哪个特定的车辆子类,并相应地采取行动。您只需确保在确定泛型车辆对象(v)是哪种类型的子类(对于Car是c,对于Truck是t)之后,将泛型车辆对象(v)转换为更具体的子类的新对象,否则代码将不会编译,因为您将尝试调用泛型车辆类型上不存在的方法,但仅限于特定车型。 我看到这种方法最大的缺点是,如果有很多代码,它可能会变得乏味。这是因为要调用的每个方法都必须检查传递给它的特定vehicle对象的类型,并根据该特定类型运行一组不同的例程。 |
![]() |
5
0
我认为你应该提供更多的细节关于你想做什么。。。
编辑 :SetFlat应该以Truck作为参数,只有这样才有意义。 |
|
simply lemon · python上链表的添加方法 12 月前 |
|
Anonymous · 为什么在这个例子中self和类名的用法不同? 1 年前 |
![]() |
P N Singh · 在CPP Oops中调用对象而不创建它 1 年前 |
![]() |
Muthuraj · 如何创建一个通用工厂来创建某种类型的实例[重复] 1 年前 |
![]() |
Andy Votava · 从父类定义调用学生方法 1 年前 |