Nasıl yapılır: as ve is İşleçlerini Kullanarak Güvenli Bir Şekilde Atama (C# Programlama Kılavuzu)
Nesneleri çok biçimli olamayacaklarıdır çünkü türetilmiş bir tür tutmak için bir temel sınıf türünde bir değişken için mümkündür.Türetilen türünün yöntemi erişmek için değeri türetilmiş bir tür atama yapmak gereklidir.Ancak, basit bir girişimi için atma riskini, bu gibi durumlarda cast oluşturur bir InvalidCastException.Yani neden C# sağlar olan ve olarak operators.Bu operatörler, bir dönüştürme işlemi özel durum oluşturuldu neden olmadan başarılı olup olmadığını sınamak için kullanabilirsiniz.Genel olarak, as operator cast başarıyla yapılabilmesi için gerçekten cast değerini döndürür çünkü daha verimli.is Operatörü bir Boole değeri döndürür.Bu nedenle yalnızca nesnenin türünü belirlemek istiyorsanız ama aslında artığını gerekmez kullanılabilir.
Örnek
Aşağıdaki örnekler nasıl kullanılacağını is ve as başka bir özel durum üretiliyor riski olmadan bir başvuru atama işleçleri yazın.Örnek de nasıl kullanacağınızı gösterir as null değer türleri ile işleci.
class SafeCasting
{
class Animal
{
public void Eat() { Console.WriteLine("Eating."); }
public override string ToString()
{
return "I am an animal.";
}
}
class Mammal : Animal { }
class Giraffe : Mammal { }
class SuperNova { }
static void Main()
{
SafeCasting app = new SafeCasting();
// Use the is operator to verify the type.
// before performing a cast.
Giraffe g = new Giraffe();
app.UseIsOperator(g);
// Use the as operator and test for null
// before referencing the variable.
app.UseAsOperator(g);
// Use the as operator to test
// an incompatible type.
SuperNova sn = new SuperNova();
app.UseAsOperator(sn);
// Use the as operator with a value type.
// Note the implicit conversion to int? in
// the method body.
int i = 5;
app.UseAsWithNullable(i);
double d = 9.78654;
app.UseAsWithNullable(d);
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
void UseIsOperator(Animal a)
{
if (a is Mammal)
{
Mammal m = (Mammal)a;
m.Eat();
}
}
void UseAsOperator(object o)
{
Mammal m = o as Mammal;
if (m != null)
{
Console.WriteLine(m.ToString());
}
else
{
Console.WriteLine("{0} is not a Mammal", o.GetType().Name);
}
}
void UseAsWithNullable(System.ValueType val)
{
int? j = val as int?;
if (j != null)
{
Console.WriteLine(j);
}
else
{
Console.WriteLine("Could not convert " + val.ToString());
}
}
}
Ayrıca bkz.
Başvuru
Türler (C# Programlama Kılavuzu)