我有一个实现接口的类。在代码的另一个区域,我检查该类实例是否包含该接口,但它不起作用。当它应该为真时,检查类是否包含接口总是失败(false)。
以下是我想要完成的内容的简单表示。
实施例
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";
}
}
答案 0 :(得分:7)
您确定是否针对正确的界面进行了测试?我的意思是,你使用正确版本的IModel进行“是”测试吗? IModel不会将我视为唯一的类型名称,因此您可能导入了错误的命名空间。
尝试明确限定支票。
即。
if (model is MyNamespace.IModel) ...
答案 1 :(得分:3)
这里的一个非常常见错误是在两个不同的程序集中声明接口,例如在两个不同的dll中包含相同的.cs
文件。由于类型是由它们的程序集定义的,因此它提供了两个冲突的接口,发生具有相同的名称。
同样的情况也很常见(使用不同的名称空间),例如在导入Web服务时;代理/生成的类型与原始类型不同。
答案 2 :(得分:2)
Validate在接口中写成小写,在类中写成大写。您的示例甚至不应该编译,因为它是编译器错误。