我收到错误:
“Namespace.A”不包含“MyObjectInterface”的定义,并且没有扩展方法“MyObjectInterface”接受类型的第一个参数......
我看过 this和 this似乎都不适用。
代码如下所示:
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
}
}
我已经尝试了我能想到的一切。在我失去更多头发之前请帮忙。
编辑
我也无法通过创建测试应用程序来重现错误,这就是我在这里的原因以及我感到沮丧的原因。
@Reed Copsey:/* something */要么是 NUnit.DynamicMock(IMailer).MockInstance 要么是我创建的 Fake 对象,它继承自 IObject 并且只返回预设值。
@Preet Sangha:我检查过,没有其他引用的程序集具有 IObject 的定义(具体来说,它称为 IMailer)。
事情是智能感知获取了属性,但是当我编译时,我得到了 CS0117。我什至可以在实现中“转到定义”,它会将我带到我定义它的地方。
最佳答案
当您引用使用在另一个程序集中定义的类型的程序集并且您没有引用依赖项的依赖项时,该错误与您得到的错误有些一致。
要解决此问题,请添加对包含 IObject
的程序集的引用。作为对包含 Implementation
的项目的引用.
这是小图。如果 Assembly2 公开了在 Assembly3 中定义的类型,则 ASsembly1 也必须引用 Assembly3。以下情况将不起作用:
_____________ _____________ _____________
| Assembly1 |references | Assembly2 |references | Assembly3 |
| -|------------|-> -|--------------|-> |
| | | public | | IObject |
| | | IObject | | |
| | | | | |
------------- ------------- -------------
只有在 Assembly3 中定义的类型可以通过 Assembly2 访问时,这才是一个问题。这将是以下情况之一:
您需要从 Assembly1 添加对 Assembly3 的引用以使其编译。
_____________ _____________ _____________
| Assembly1 |references | Assembly2 |references | Assembly3 |
| -|------------|-> -|--------------|-> |
| | | public | | IObject |
| |references | IObject | | |
| -|------------|------------|--------------|-> |
| | | | | |
------------- ------------- -------------
关于c# - 错误 CS0117 : Namespace. A 不包含接口(interface)的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2822715/