Why doesn't is operator take in consideration if the explicit operator is overriden when checking types?
<p>Hey Guys, <br />
Consider this code sample: <br /></p>

<pre><code>public class Human {    
    public string Value { get; set;}
}
public class Car { 

    public static explicit operator Human (Car c) { 

        Human h = new Human();

        h.Value = "Value from Car";
        return h;
    }
}

public class Program { 
public static void Mani() { 
        Car c = new Car();

        Human h = (Human)c;
        Console.WriteLine("h.Value = {0}", h.Value);
        Console.WriteLine(c is Human);
}
}
</code></pre>

<p>Up I provide a possibility of an explicit cast from Car to Human, though Car and Human hierarchically are not related! The above code simply means that <strong>"Car is convertible to human"</strong> <br /></p>

<p>However, if you run the snippet you will find the expression <code>c is Human</code> evaluates to false! <a href="http://galilyou.blogspot.com/2010/03/usage-of-is-operator-should-be-handled.html" rel="nofollow">I used to believe that the is operator is kinda expensive cause it attempts to do an actual cast</a> that might result in an <code>InvalidCastException</code>. If the operator is trying to cast, then the cast should succeed as there's an operator logic that should perform the cast! <br />
What does "is" test? <br />
Does test a hierarchical <strong>"is-a"</strong> relationship? <br /> 
Does test whether a variable type <strong>"is convertible to"</strong> a type? <br /></p>
