简体   繁体   中英

Why does the check for an interface fail?

I have a class that implements an interface. In another area of the code I check if that class instance contains that interface, but it doesn't work. The check to see if the class contains the interface always fails (false) when it should be true.

Below is a simple representation of what I am trying to accomplish.

Example

  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";
        }
    }

Did you make sure you tested against the correct interface? By that I mean, is your "is" test using the correct version of IModel? IModel doesn't strike me as a unique type name, so you may have imported an incorrect namespace.

Try explicitly qualifying your check.

Ie

   if (model is MyNamespace.IModel) ...

One very common error here is to declare the interface in two different assemblies, for example by including the same .cs file in two different dlls. Since types are defined by their assembly, this gives two conflicting interfaces, which happen to have the same name.

The same scenario is also common (with different namespaces), for example when importing web-services; the proxy/generated type is different to the originating type.

Validate is written lower case in the interface and upper case in the class. Your example shouldn't even compile, as it is an compiler error.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM