【发布时间】:2011-02-18 20:17:34
【问题描述】:
我收到了错误:
“Namespace.A”不包含“MyObjectInterface”的定义,并且没有扩展方法“MyObjectInterface”接受类型的第一个参数...
代码如下:
public abstract class Base
{
public IObject MyObjectInterface { get; set; }
}
public class A : Base
{
/**/
}
public class Implementation
{
public void Method()
{
Base obj = new A();
obj.MyObjectInterface = /* something */; // Error here
}
}
-
IObject 在单独的程序集中定义,但是:
- IObject 位于单独的程序集/命名空间中
- Base 和 A 位于相同的程序集/命名空间中,每个都有正确的 using 指令
- 实现在第三个单独的程序集命名空间中,也具有正确的 using 指令。
在尝试设置 MyObjectInterface 之前转换为 A 不起作用
- 具体来说,我正在尝试将 MyObjectInterface 的值设置为模拟对象(不过,我创建了一个假对象,但无济于事)
我已经尝试了我能想到的一切。在我失去更多头发之前请帮忙。
编辑 我也无法通过创建测试应用来重现错误,这就是我在这里的原因以及我感到沮丧的原因。
@Reed Copsey: /* something */ 要么是 NUnit.DynamicMock(IMailer).MockInstance 要么是我创建的 Fake 对象,它继承自 IObject 并且只返回预设值。
@Preet Sangha:我检查过,没有其他引用的程序集有 IObject 的定义(具体来说,它称为 IMailer)。
事情是智能感知获取属性,但是当我编译时,我得到 CS0117。我什至可以在实现中“转到定义”,它会将我带到我定义它的地方。
【问题讨论】:
-
我创建了一个虚拟项目,并在单独的程序集中使用 IObject,而这段代码在另一个程序集中。一切都很好编译。我强烈怀疑有不同的问题导致了这个问题。您是否通过确保不会从您需要的实现中从其他地方获取对 IObject 的引用来确认。
-
什么是“Type”的错误报告以及“/* something */”是如何定义的?这两个问题对于正确回答您至关重要......
标签: c# assemblies namespaces compiler-errors