Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未调用我的重载泛型方法_C#_Generics_Overloading - Fatal编程技术网

C# 未调用我的重载泛型方法

C# 未调用我的重载泛型方法,c#,generics,overloading,C#,Generics,Overloading,我在我的一个C#项目中编写了这段代码: 注册表AppendReceiver调用示例: myObject.RegisterAppendReceiver(myMethod); 其中myMethod的定义如下: public void writeMessage(string strMessageIn) 我的问题是为什么调用了错误的重载,以及如何强制语言调用我想要的重载 谢谢你的帮助 Eric Lippert在他的文章中简洁地回答了这个问题 我不想复制整篇文章。因此,相关的一点是: 我们做一次重载解

我在我的一个C#项目中编写了这段代码:

注册表AppendReceiver
调用示例:

myObject.RegisterAppendReceiver(myMethod);
其中
myMethod
的定义如下:

public void writeMessage(string strMessageIn)
我的问题是为什么调用了错误的重载,以及如何强制语言调用我想要的重载


谢谢你的帮助

Eric Lippert在他的文章中简洁地回答了这个问题

我不想复制整篇文章。因此,相关的一点是:

我们做一次重载解析,然后烘焙结果

因此,C#编译器在编译RegisterAppendReceiver时决定将调用哪个“GetAppendReceiver.Get”重载。因为,在这一点上,它只知道数据类型可以是任何东西,所以它在对重载的调用中编译,重载采用AppendReceiver.DataProcessor,而不是AppendReceiver.DataProcessor


比较之下,C++编译器的行为不是这样的。每次进行泛型调用时,编译器都会重新进行替换。这是C++编译器比C编译器慢得多的原因。< / P>好,我理解其中的差异,谢谢你的解释。有没有一种方法可以通过C实现我的目标?根据Eric的文章,dynamic可以做到这一点,但它将在运行时而不是编译时解析类型。只要性能不是问题,这就行了。@AMDG在这种情况下,您也可以简单地使用继承。在我看来,这似乎是抽象工厂模式的经典示例——GoF完美地描述了如何使用标准继承来实现这一点。@atlaste什么是GoF?“四人帮”——它通常用作设计模式“标准”书籍的缩写:(右边的那本)
myObject.RegisterAppendReceiver(myMethod);
public void writeMessage(string strMessageIn)