C# 为什么接口检查失败?
我有一个实现接口的类。在代码的另一个区域中,我检查该类实例是否包含该接口,但它不起作用。查看类是否包含接口的检查在应该为true时总是失败(false) 下面是我试图完成的一个简单的表示 范例C# 为什么接口检查失败?,c#,C#,我有一个实现接口的类。在代码的另一个区域中,我检查该类实例是否包含该接口,但它不起作用。查看类是否包含接口的检查在应该为true时总是失败(false) 下面是我试图完成的一个简单的表示 范例 public interface IModel { bool validate(); } public class SomeModel : IModel { public SomeModel { }
public interface IModel
{
bool validate();
}
public class SomeModel : IModel
{
public SomeModel
{
}
public bool Validate()
{
return true;
}
}
// Dummy method
public void Run()
{
SomeModel model = new SomeModel();
if (model is IModel)
{
string message = "It worked";
}
else
{
string message = "It failed";
}
}
Validate在接口中以小写形式编写,在类中以大写形式编写。您的示例甚至不应该编译,因为这是一个编译器错误。您是否确保针对正确的接口进行了测试?我的意思是,您的“is”测试是否使用了正确版本的IModel?IModel并不是唯一的类型名,所以您可能导入了不正确的命名空间 尝试明确限定您的支票 即 这里一个非常常见的错误是在两个不同的程序集中声明接口,例如在两个不同的DLL中包含相同的
.cs
文件。由于类型是由它们的程序集定义的,因此会产生两个冲突的接口,它们恰好具有相同的名称
同样的场景也很常见(使用不同的名称空间),例如在导入web服务时;代理/生成的类型与原始类型不同。我认为您的接口定义中有一个输入错误。验证应大写。给定的示例包含一些输入错误更正。你能给我们一个更完整的例子,说明你的代码中出现了什么问题吗?我无法用你的例子再现你的错误。请发布一个例子来说明错误。这个例子只是为了帮助解释问题。这不是一个有效的例子。该死,这就是它。我在项目的不同部分有两个界面副本,一个引用一个,另一个引用另一个。我想subversion在最近的更新中把它带回来了。。。
if (model is MyNamespace.IModel) ...