gpt4 book ai didi

c# - 当接口(interface)中有重载方法时,为什么我的代码会调用错误的方法

转载 作者:太空宇宙 更新时间:2023-11-03 13:39:35 25 4
gpt4 key购买 nike

我有两种方法:

public void WriteRecord(string collectionName, IDatabaseRecord databaseRecord)
public void WriteRecord(string collectionName, BsonDocument bsonDocument)

我将它们包含在我的界面中:

void WriteRecord(string collectionName, BsonDocument bsonDocument);
void WriteRecord(string collectionName, IDatabaseRecord databaseRecord);

然后当我打电话时;

_databaseClient.WriteRecord(Collections.Tracking, workflowTrackingRecord);

其中 workflowTrackingRecord 的类型为 WorkflowInternalTrackingRecord : IDatabaseRecord

我可以看到代码正在尝试调用第二种方法(使用 BsonDocument 的方法),因为我在上面的行中遇到了这个编译错误。:

“类型‘MongoDB.Bson.BsonDocument’在未引用的程序集中定义。您必须添加对程序集‘MongoDB.Bson...’的引用”

如果我删除

void WriteRecord(string collectionName, IDatabaseRecord databaseRecord); 

然后从界面

_databaseClient.WriteRecord(Collections.Tracking, workflowTrackingRecord);

工作正常。

为什么编译器指向了错误的方法。它使用什么标准来决定?

最佳答案

您还没有走到这一步就可以得出编译器选择了错误重载的结论。要确定 哪个 重载是合适的,编译器需要 BsonDocument 和 IDatabaseRecord 的类型信息。但它不能那样做,它只知道 BsonDocument 存在但不知道它是什么样子。

或者换句话说,编译器不仅对完美的候选者感到满意,它还想知道所有的。在这种特定情况下并不是那么明显有用,但是如果重载有任何歧义,那么获得一个好的错误消息并避免编译器仅仅因为它对正确的信息了解不够而选择错误的信息就变得很重要.

只需提供程序集引用,您的问题就会得到解决。

关于c# - 当接口(interface)中有重载方法时,为什么我的代码会调用错误的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17569583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com