为什么检查接口失败?

时间:2010-05-18 21:00:24

标签: c#

我有一个实现接口的类。在代码的另一个区域,我检查该类实例是否包含该接口,但它不起作用。当它应该为真时,检查类是否包含接口总是失败(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";
        }
    }

3 个答案:

答案 0 :(得分:7)

您确定是否针对正确的界面进行了测试?我的意思是,你使用正确版本的IModel进行“是”测试吗? IModel不会将我视为唯一的类型名称,因此您可能导入了错误的命名空间。

尝试明确限定支票。

即。

   if (model is MyNamespace.IModel) ...

答案 1 :(得分:3)

这里的一个非常常见错误是在两个不同的程序集中声明接口,例如在两个不同的dll中包含相同的.cs文件。由于类型是由它们的程序集定义的,因此它提供了两个冲突的接口,发生具有相同的名称。

同样的情况也很常见(使用不同的名称空间),例如在导入Web服务时;代理/生成的类型与原始类型不同。

答案 2 :(得分:2)

Validate在接口中写成小写,在类中写成大写。您的示例甚至不应该编译,因为它是编译器错误。