Előfordulhat, hogy egy típusról futás időben szeretnénk megtudni a típusát egy feltételben. Erre az is kulcsszó használható. Az is kulcsszó a későbbiekben felület megvalósítás és ősosztály megállapítás és pattern matching során lesz hasznos. Példa:
using System;
namespace PeldaIs
{
class Osztaly1 { }
class Osztaly2 { }
class Osztaly3 : Osztaly2 { }
class Program
{
static void Tesztel(object o)
{
if (o is Osztaly1)
{
Console.WriteLine("o típusa Osztaly1");
}
else if (o is Osztaly2)
{
Console.WriteLine("o típusa Osztaly2");
//itt Osztaly2 és Osztaly3 esetén is!
}
else
{
Console.WriteLine("o számomra ismeretlen típusú");
}
}
static void Main(string[] args)
{
var c1 = new Osztaly1();
var c2 = new Osztaly2();
var c3 = new Osztaly3();
Tesztel(c1);
Tesztel(c2);
Tesztel(c3);
Tesztel("Szöveg");
Console.ReadLine();
}
}
}
A program kimenete:
o típusa Osztaly1
o típusa Osztaly2
o típusa Osztaly2
o számomra ismeretlen típusú
A fenti példában az Osztaly3 esetén tapasztalható érdekes működés. A program erre is Osztaly2-t fog kiírni. Ennek az oka az, hogy az Osztaly3 ősosztálya Osztaly2, amit figyelembe vesz az is operátor. Fordítás idejű hibát kapunk az is operátor használata esetén, ha a fordító azt érzékeli, hogy a kifejezés mindig igaz, vagy mindig hamis értékű lesz.
Amire itt érdemes figyelni az az, hogy az is nem veszi figyelembe a külön leimplementált explicit vagy implicit konverter operátort, csak a rendszer által szállítottakat, azaz boxing és unboxing történhet használata közben.