![]() |
1
4
不,这是静态与动态调度问题。静态调度意味着重载方法调用在编译时根据 变量 通过:
动态调度是指函数在运行时根据存储在变量中的对象的实际类型进行绑定:
最后一张图显示了两者的区别。与大多数基于类的OOP语言一样,C只支持
在单调度语言中伪造多个调度的典型解决方案是使用 visitor pattern 在这里对你有用。 |
![]() |
2
2
这是因为编译器只知道类型将是一个控件,所以它总是用control参数绑定到方法。如果需要以不同的方式处理它们,则需要在draw()方法中添加显式签入:
请注意,这不是很“通用”…但在你的特殊情况下,它可能会起作用。 |
![]() |
3
2
建立慷慨的答案:不同于C++模板, C# generics are not instantiated at compile time . C编译器为通用类型生成的代码与您在代码中使用的专门化完全无关。编译器会生成一段代码,用于替换满足约束的类型参数。直到运行时,当完全指定的泛型类型的实例被实例化时,JIT编译器才会创建特定于类型参数的代码。
由于生成的代码适用于任何符合约束条件的代码,因此C编译器将处理
|