Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Tür testi işleçleri ve dönüştürme ifadeleri -
Bu işleçler ve ifadeler tür denetimi veya tür dönüştürme gerçekleştirir. işleci, isbir ifadenin çalışma zamanı türünün belirli bir türle uyumlu olup olmadığını denetler. İşleç as, çalışma zamanı türü bu türle uyumluysa ifadeyi açıkça belirli bir türe dönüştürür.
Atama ifadeleri , hedef türe açık bir dönüştürme gerçekleştirir. işleci typeof bir tür için örneği alır.System.Type
is işleci
işleci, is bir ifade sonucunun çalışma zamanı türünün belirli bir türle uyumlu olup olmadığını denetler. İşleç is ayrıca bir ifade sonucunu bir desene göre test ediyor.
Tür testi is işlecine sahip ifade aşağıdaki forma sahiptir
E is T
Burada E , bir değer döndüren ve T tür veya tür parametresinin adı olan bir ifadedir.
E anonim bir yöntem veya lambda ifadesi olamaz.
bir is ifade sonucu null olmadığında ve aşağıdaki koşullardan herhangi biri doğru olduğunda işleç döndürür true :
Bir ifade sonucunun çalışma zamanı türüne kimlik dönüşümü vardır:
T.bir ifade sonucunun çalışma zamanı türü, türünden
Ttüretilir, arabiriminiTuygular veya başka bir örtük başvuru dönüştürmesi ondan 'aTvar olur. Bu, devralma ilişkilerini ve arabirim uygulamalarını kapsar.İfade sonucunun çalışma zamanı türü, temel alınan türe sahip null atanabilir bir ve
Tdeğeri ise olurNullable<T>.HasValue.İfade bir örneği olmadığında, ifade sonucunun çalışma zamanı türünden türe bir
Tveyaref structdönüştürmesi vardır.
işleç is , kullanıcı tanımlı dönüştürmeleri veya örtük span dönüştürmelerini dikkate almaz.
Aşağıdaki örnek, bir ifade sonucunun is çalışma zamanı türü belirli bir türden türetilirse, yani türler arasında bir başvuru dönüştürmesi varsa işlecinin döndürdüğünü true gösterir:
public class Base { }
public class Derived : Base { }
public static class IsOperatorExample
{
public static void Main()
{
object b = new Base();
Console.WriteLine(b is Base); // output: True
Console.WriteLine(b is Derived); // output: False
object d = new Derived();
Console.WriteLine(d is Base); // output: True
Console.WriteLine(d is Derived); // output: True
}
}
Sonraki örnekte, işlecin kutulama ve kutu açma dönüştürmelerini dikkate aldığı ancak sayısal dönüştürmeleri dikkate is
int i = 27;
Console.WriteLine(i is System.IFormattable); // output: True
object iBoxed = i;
Console.WriteLine(iBoxed is int); // output: True
Console.WriteLine(iBoxed is long); // output: False
C# dönüştürmeleri hakkında bilgi için C# dil belirtiminin Dönüştürmeler bölümüne bakın.
Desen eşleştirme ile tür testi
İşleç is ayrıca bir ifade sonucunu bir desene göre test ediyor. Aşağıdaki örnekte, bir ifadenin çalışma zamanı türünü denetlemek için bildirim deseninin nasıl kullanılacağı gösterilmektedir:
int i = 23;
object iBoxed = i;
int? jNullable = 7;
if (iBoxed is int a && jNullable is int b)
{
Console.WriteLine(a + b); // output 30
}
Desteklenen desenler hakkında bilgi için bkz . Desenler.
as işleci
işleci açıkça as bir ifadenin sonucunu belirli bir başvuruya veya null atanabilir değer türüne dönüştürür. Dönüştürme mümkün değilse işleci as döndürür null.
Atama ifadelerinden farklı olarakas, işleç hiçbir zaman bir özel durum oluşturmaz.
Formun ifadesi
E as T
Burada E , bir değer döndüren ve T bir tür veya tür parametresinin adı olan bir ifade, aynı sonucu verir
E is T ? (T)(E) : (T)null
Sadece E bir kez değerlendirilir.
işleci as yalnızca başvuru, null atanabilir, kutulama ve kutu açma dönüştürmelerini dikkate alır. kullanıcı tanımlı dönüştürme gerçekleştirmek için işlecini as kullanamazsınız. Bunu yapmak için bir atama ifadesi kullanın.
Aşağıdaki örnekte işlecin kullanımı gösterilmektedir as :
IEnumerable<int> numbers = new List<int>(){10, 20, 30};
IList<int> indexable = numbers as IList<int>;
if (indexable != null)
{
Console.WriteLine(indexable[0] + indexable[indexable.Count - 1]); // output: 40
}
Not
Yukarıdaki örnekte gösterildiği gibi, dönüştürmenin başarılı olup olmadığını denetlemek için ifadesinin as sonucunu ile null karşılaştırmanız gerekir. Hem dönüştürmeninis başarılı olup olmadığını test etmek hem de başarılı olursa sonucunu yeni bir değişkene atamak için işlecini kullanabilirsiniz.
Atama ifadesi
Formun (T)E atama ifadesi, ifade E sonucunun türüne Taçık bir dönüştürmesini gerçekleştirir. türünden türüne ETaçık dönüştürme yoksa derleme zamanı hatası oluşur. Çalışma zamanında, açık dönüştürme başarılı olmayabilir ve bir atama ifadesi bir özel durum oluşturabilir.
Aşağıdaki örnekte açık sayısal ve başvuru dönüştürmeleri gösterilmektedir:
double x = 1234.7;
int a = (int)x;
Console.WriteLine(a); // output: 1234
int[] ints = [10, 20, 30];
IEnumerable<int> numbers = ints;
IList<int> list = (IList<int>)numbers;
Console.WriteLine(list.Count); // output: 3
Console.WriteLine(list[1]); // output: 20
Desteklenen açık dönüştürmeler hakkında bilgi için C# dil belirtiminin Açık dönüştürmeler bölümüne bakın. Özel açık veya örtük tür dönüştürme tanımlama hakkında bilgi için bkz . Kullanıcı tanımlı dönüştürme işleçleri.
() diğer kullanımları
Ayrıca bir yöntemi çağırmak veya temsilci çağırmak için de parantez kullanırsınız.
Parantezlerin diğer kullanımı, ifadedeki işlemlerin değerlendirilme sırasını ayarlamaktır. Daha fazla bilgi için bkz . C# işleçleri.
typeof işleci
işleci typeof bir tür için örneği alır System.Type . aşağıdaki örnekte gösterildiği gibi işlecin bağımsız değişkeni typeof bir tür veya tür parametresinin adı olmalıdır:
void PrintType<T>() => Console.WriteLine(typeof(T));
Console.WriteLine(typeof(List<string>));
PrintType<int>();
PrintType<System.Int32>();
PrintType<Dictionary<int, char>>();
// Output:
// System.Collections.Generic.List`1[System.String]
// System.Int32
// System.Int32
// System.Collections.Generic.Dictionary`2[System.Int32,System.Char]
Bağımsız değişken, meta veri ek açıklamaları gerektiren bir tür olmamalıdır. Örnek olarak aşağıdaki türler verilebilir:
dynamic-
string?(veya boş değer atanabilir herhangi bir başvuru türü)
Bu türler meta verilerde doğrudan temsil edilir. Türler, temel alınan türü açıklayan öznitelikleri içerir. Her iki durumda da temel alınan türü kullanabilirsiniz.
dynamicyerine kullanabilirsinizobject.
string?yerine kullanabilirsinizstring.
İşleci ilişkisiz typeof genel türlerle de kullanabilirsiniz. İlişkisiz genel türün adı, tür parametrelerinin sayısından az olan uygun sayıda virgül içermelidir. Aşağıdaki örnekte, işlecin ilişkisiz genel türüyle kullanımı typeof gösterilmektedir:
Console.WriteLine(typeof(Dictionary<,>));
// Output:
// System.Collections.Generic.Dictionary`2[TKey,TValue]
İfade, işlecin bağımsız değişkeni typeof olamaz. İfade sonucunun System.Type çalışma zamanı türünün örneğini almak için yöntemini kullanın Object.GetType .
işleciyle typeof tür testi
İfade sonucunun typeof çalışma zamanı türünün belirli bir türle tam olarak eşleşip eşleşmediğini denetlemek için işlecini kullanın. Aşağıdaki örnek, typeof işleci ile is işleci kullanılarak yapılan tür denetimi arasındaki farkı göstermektedir.
public class Animal { }
public class Giraffe : Animal { }
public static class TypeOfExample
{
public static void Main()
{
object b = new Giraffe();
Console.WriteLine(b is Animal); // output: True
Console.WriteLine(b.GetType() == typeof(Animal)); // output: False
Console.WriteLine(b is Giraffe); // output: True
Console.WriteLine(b.GetType() == typeof(Giraffe)); // output: True
}
}
İşleç aşırı yüklenebilirliği
is, asve typeof işleçleri aşırı yüklenemez.
Kullanıcı tanımlı bir tür, () işleci aşırı yükleyemez, ancak bir dönüştürme ifadesi tarafından gerçekleştirilen özel tür dönüştürmelerini tanımlayabilir. Daha fazla bilgi için bkz . Kullanıcı tanımlı dönüştürme işleçleri.
C# dili belirtimi
Daha fazla bilgi için C# dil belirtiminin aşağıdaki bölümlerine bakın: