is C# with Example
Checks if an object is compatible with a given type, i.e. if an object is an instance of the BaseInterface type, or a type that derives from BaseInterface: interface BaseInterface {} class BaseClass : BaseInterface {} class DerivedClass : BaseClass {} var d = new DerivedClass(); Console.WriteLine(d is DerivedClass); // True Console.WriteLine(d is BaseClass); // True Console.WriteLine(d is BaseInterface); // True Console.WriteLine(d is object); // True Console.WriteLine(d is string); // False var b = new BaseClass(); Console.WriteLine(b is DerivedClass); // False Console.WriteLine(b is BaseClass); // True Console.WriteLine(b is BaseInterface); // True Console.WriteLine(b is object); // True Console.WriteLine(b is string); // False If the intent of the cast is to use the object, it is best practice to use the as keyword' interface BaseInterface {} class BaseClass : BaseInterface {} class DerivedClass : BaseClass {} var d = new DerivedClass(); Console.WriteLine(d is DerivedClass); // True - valid use of 'is' Console.WriteLine(d is BaseClass); // True - valid use of 'is' if(d is BaseClass){ var castedD = (BaseClass)d; castedD.Method(); // valid, but not best practice } var asD = d as BaseClass; if(asD!=null){ asD.Method(); //preferred method since you incur only one unboxing penalty } But, from C# 7 pattern matching feature extends the is operator to check for a type and declare a new variable at the same time. Same code part with C# 7 : Version ≥ 7.0 if(d is BaseClass asD ){ asD.Method(); }