|
|
1
4
严格地说,方法签名必须与委托指定的签名完全匹配(协变匹配除外)。但是,您可以创建一个
编辑:
如果您有关于要调用的方法的信息,可以使用
但是,对于基准测试,我认为您最好使用实现必要基准测试操作的抽象基类:
虚拟方法分派具有与委托类似的延迟,并且比动态调用要好得多。 |
|
|
2
4
不。 他们仍然需要尊重类型差异。 params只是用来表示从那一点到那一点,调用站点的所有参数都被认为是方法上同一数组的一部分的语法糖。 因此,对于定义为:
你可以做到:
但不是:
因为,虽然company3在运行时包含一个公司,但它的静态类型是object。 现在我们知道了,params只是在一个方法上定义了一个数组,它允许您在调用站点使用更方便的语法。 现在,让我们继续讨论代码不能按预期工作的真正原因:类型差异 您的代表被定义为:
你的目标方法是:
调用委托时:
很重要的一点是,您可以调用InsertObjects,将带有任何类型对象的数组传递给它,而不是公司类型的对象。 当然,编译器不允许这样做。 相反,您可以反转委托的类型和目标方法,例如:
然后它将编译,因为您将向接受任何类型对象的方法传递一个客户数组。 结论: 参数不影响类型差异规则。 |
|
|
3
2
匹配
因此,是的,您需要更改所有方法,或者使用匿名方法作为包装,如下所示:
|
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |