![]() |
1
5
但是,我不知道为什么其他的改变会使它工作…让我想想,更新待定。 在C我不明白这个问题,因为你不能将TargetBase转发到TargetOne或TargetTwo…它给出了不同的编译器错误-方法的参数无效,因为它无法将基隐式转换为派生的。您提到的第一个编译器错误基本上是与vb.net等效的。 我发现了这个链接,但我不确定它是否适用于vb或vb.net——不管怎样,有趣的是: http://msdn.microsoft.com/en-us/library/tb18a48w.aspx
这也可能与
更新: 请注意,我不知道它为什么会突然生效,这听起来像是乔恩·斯基特或埃里克·利珀特的作品。 更新2: 我可以建议的一件事是针对每种情况(私有到公共/对象的使用)编译应用程序并使用Reflector检查IL。基本上,寻找任何不同之处——可能是编译器正在为您添加一些东西——或者是运行时能够根据当前类型确定正确的方法。 更新3:我想我明白了。 以下链接中的引用:
http://visualbasic.about.com/od/usingvbnet/a/earlybind.htm 说当您指定targetbase时,它是早期绑定的,编译器会抱怨。当您指定对象时,它是后期绑定的,运行时会在其私有重新建立此链接时抱怨: http://msdn.microsoft.com/en-us/library/h3xt2was(VS.80).aspx 因此,请为您指定公共工程。运行时显然能够延迟绑定到正确的重载——这是一个很好的延迟绑定特性,被vb.net为您隐藏:—) |
![]() |
2
3
虽然vb不是我的专长,但我想我能正确回答你的问题。
在程序的第一个版本中
在第二个版本中,objTarget的类型为object。VB原因如下。
在第三个版本中,我们进入后期绑定,后期绑定在运行时成功。 我在这里要做的是:
我不知道vb语法是什么,但在c中,我会这样写:
又好又简单。进行两次收集,先取出目标,然后取出目标。 (还要注意,如果我不使用list的任何特性,那么我会将参数设置为IEnumerable,这样方法就更通用了。) |
![]() |
3
2
正如亚当所说,编译器不知道应该调用哪个方法。但是,这看起来像
它的另一个优点是可以更好地封装代码。
|
![]() |
4
1
更新
:因为您在评论中指出,在您的情况下,这个问题的正常多态方法是不可能的,所以我至少强烈建议您更改
…到处都是。 换句话说,把那张难看的支票放在一个地方:
你已经得到 polymorphism 向后的。 马上,这就是我直觉上认为你的方式 真正地 希望此功能正常工作:
|
![]() |
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
![]() |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
![]() |
Niyazi Babayev · 如何在表达式中动态应用表达式? 2 年前 |
|
Dansih · .Net核心自定义身份验证方案 2 年前 |
![]() |
lolorekkk · 面板插入。NET WinForm 2 年前 |