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.
Bu makale, bu API'nin başvuru belgelerine ek açıklamalar sağlar.
Type sınıfı, System.Reflection işlevselliğinin köküdür ve meta verilere erişmenin birincil yoludur. Bir tür bildirimi hakkında, bir türün üyeleri (örneğin bir sınıfın oluşturucuları, yöntemleri, alanları, özellikleri ve olayları) ve sınıfın içinde bulunduğu modül ve derleme hakkında bilgi almak için Type üyelerini kullanın.
Erişim düzeylerinden bağımsız olarak türleri ve üyeleri hakkında bilgi almak için kodun yansımayı kullanması için hiçbir izin gerekmez. Kodun yansımayı kullanarak genel üyelere veya erişim düzeyleri normal derleme sırasında bunları görünür hale getirecek diğer üyelere erişmesi için izin gerekmez. Ancak kodunuzun yansımayı kullanarak özel veya iç yöntemler gibi normalde erişilemeyen üyelere ya da sınıfınızın devralmadığı türde korumalı alanlara erişmesi için kodunuzun ReflectionPermissionolması gerekir. Yansıma içinGüvenlik Konuları konusuna bakın.
Type, birden çok uygulamaya izin veren soyut bir temel sınıftır. Sistem her zaman türetilmiş sınıfı RuntimeTypesağlar. Yansımada, Runtime sözcüğüyle başlayan tüm sınıflar sistemdeki nesne başına yalnızca bir kez oluşturulur ve karşılaştırma işlemlerini destekler.
Uyarı
Çok iş parçacıklı senaryolarda, Type nesnelerini kilitlemeyin, böylece static verilere erişimi eşitleyebilirsiniz. Üzerinde denetiminizin olmadığı diğer kodlar da sınıf türünüzü kilitler. Bu kilitlenmeye neden olabilir. Bunun yerine, özel bir static nesnesini kilitleyerek statik verilere erişimi eşitleyin.
Uyarı
Türetilmiş bir sınıf, çağıran kodun temel sınıflarının korumalı üyelerine erişebilir. Çağıran kodun derlemesine ait üyelerin erişimine de izin verilir. Kural olarak, erken bağlanan kodda erişim iznine sahipseniz, geç bağlanan kodda da erişime izin verilir.
Uyarı
Diğer arabirimleri genişleten arabirimler, genişletilmiş arabirimlerde tanımlanan yöntemleri devralmaz.
Type nesnesi hangi türleri temsil eder?
Bu sınıf iş parçacığı güvenlidir; birden çok iş parçacığı bu türden bir örnekten eşzamanlı olarak okuyabilir. Type sınıfının bir örneği aşağıdaki türlerden herhangi birini temsil edebilir:
- Sınıflar
- Değer türleri
- Diziler
- Arayüzler
- Numaralandırma
- Temsilciler
- Genel türler ve genel tür tanımları oluşturma
- Tür bağımsız değişkenleri ve tür parametreleri, oluşturulmuş genel türler, genel tür tanımları ve genel metot tanımları
Bir Tür nesnesi al.
Belirli bir türle ilişkili Type nesnesi aşağıdaki yollarla elde edilebilir:
Örnek Object.GetType yöntemi, örneğin türünü temsil eden bir Type nesnesi döndürür. Tüm yönetilen türler Object'dan türetildiği için, GetType yöntemi herhangi bir türün örneğinde çağrılabilir.
Aşağıdaki örnek, bir nesne dizisindeki her nesnenin çalışma zamanı türünü belirlemek için Object.GetType yöntemini çağırır.
object[] values = { "word", true, 120, 136.34, 'a' }; foreach (var value in values) Console.WriteLine($"{value} - type {value.GetType().Name}"); // The example displays the following output: // word - type String // True - type Boolean // 120 - type Int32 // 136.34 - type Double // a - type Charlet values: obj[] = [| "word"; true; 120; 136.34; 'a' |] for value in values do printfn $"{value} - type {value.GetType().Name}" // The example displays the following output: // word - type String // True - type Boolean // 120 - type Int32 // 136.34 - type Double // a - type CharModule Example1 Public Sub Main() Dim values() As Object = { "word", True, 120, 136.34, "a"c } For Each value In values Console.WriteLine("{0} - type {1}", value, value.GetType().Name) Next End Sub End Module ' The example displays the following output: ' word - type String ' True - type Boolean ' 120 - type Int32 ' 136.34 - type Double ' a - type CharStatik Type.GetType yöntemleri, tam adıyla belirtilen bir türü temsil eden bir Type nesnesi döndürür.
Module.GetTypes, Module.GetTypeve Module.FindTypes yöntemleri, modülde tanımlanan türleri temsil eden
Typenesneleri döndürür. İlk yöntem, bir modülde tanımlanan tüm genel ve özel türler için Type nesneleri dizisi elde etmek için kullanılabilir. (Moduleveya Assembly.GetModule yöntemi veya Assembly.GetModules özelliği aracılığıyla Type.Module örneğini alabilirsiniz.)System.Reflection.Assembly nesnesi, Assembly.GetType, Assembly.GetTypesve Assembly.GetExportedTypesdahil olmak üzere bir derlemede tanımlanan sınıfları almak için bir dizi yöntem içerir.
FindInterfaces yöntemi, bir tür tarafından desteklenen arabirim türlerinin filtrelenmiş bir listesini döndürür.
GetElementType yöntemi, öğesini temsil eden bir
Typenesnesi döndürür.GetInterfaces ve GetInterface yöntemleri, bir tür tarafından desteklenen arabirim türlerini temsil eden Type nesneleri döndürür.
GetTypeArray yöntemi, rastgele bir nesne kümesi tarafından belirtilen türleri temsil eden bir Type nesnesi dizisi döndürür. Nesneler Objecttüründe bir diziyle belirtilir.
COM birlikte çalışabilirliği için GetTypeFromProgID ve GetTypeFromCLSID yöntemleri sağlanır. Onlar, bir Type veya
ProgIDtarafından belirtilmiş türü temsil edenCLSIDnesnesini döndürür.Birlikte çalışabilirlik sağlamak için GetTypeFromHandle yöntemi sunulmaktadır. Sınıf tanıtıcısı tarafından belirtilen türü temsil eden bir
Typenesnesi döndürür.C#
typeofişleci, C++typeidişleci ve Visual BasicGetTypeişleci bir tür içinTypenesnesini alır.MakeGenericType yöntemi, Type özelliği ContainsGenericParametersdöndürürse açık bir genel yapılandırılmış tür olan ve aksi takdirde kapalı bir yapılandırılmış türü temsil eden bir
truenesnesi döndürür. Genel bir türün örneği yalnızca kapalı durumda ise oluşturulabilir.MakeArrayType, MakePointerTypeve MakeByRefType yöntemleri sırasıyla, belirtilen türde bir diziyi, belirtilen türe işaretçiyi ve başvuru parametresinin türünü (C#'daType, F# dilinde 'byref'
refVisual Basic'te) temsil edenByRefnesneler döndürür.
Tür nesnelerini eşitlik için karşılaştırma
Bir türü temsil eden Type nesnesi benzersizdir; başka bir deyişle, iki Type nesne başvurusu aynı nesneye işaret eder, ancak bu, yalnızca aynı türü temsil ettikleri takdirde geçerlidir. Bu, başvuru eşitliği kullanılarak Type nesnelerin karşılaştırılmasını sağlar. Aşağıdaki örnek, aynı türde olup olmadıklarını belirlemek için bir dizi tamsayı değerini temsil eden Type nesnelerini karşılaştırır.
long number1 = 1635429;
int number2 = 16203;
double number3 = 1639.41;
long number4 = 193685412;
// Get the type of number1.
Type t = number1.GetType();
// Compare types of all objects with number1.
Console.WriteLine($"Type of number1 and number2 are equal: {Object.ReferenceEquals(t, number2.GetType())}");
Console.WriteLine($"Type of number1 and number3 are equal: {Object.ReferenceEquals(t, number3.GetType())}");
Console.WriteLine($"Type of number1 and number4 are equal: {Object.ReferenceEquals(t, number4.GetType())}");
// The example displays the following output:
// Type of number1 and number2 are equal: False
// Type of number1 and number3 are equal: False
// Type of number1 and number4 are equal: True
let number1 = 1635429L
let number2 = 16203
let number3 = 1639.41
let number4 = 193685412L
// Get the type of number1.
let t = number1.GetType()
// Compare types of all objects with number1.
printfn $"Type of number1 and number2 are equal: {Object.ReferenceEquals(t, number2.GetType())}"
printfn $"Type of number1 and number3 are equal: {Object.ReferenceEquals(t, number3.GetType())}"
printfn $"Type of number1 and number4 are equal: {Object.ReferenceEquals(t, number4.GetType())}"
// The example displays the following output:
// Type of number1 and number2 are equal: False
// Type of number1 and number3 are equal: False
// Type of number1 and number4 are equal: True
Module Example
Public Sub Main()
Dim number1 As Long = 1635429
Dim number2 As Integer = 16203
Dim number3 As Double = 1639.41
Dim number4 As Long = 193685412
' Get the type of number1.
Dim t As Type = number1.GetType()
' Compare types of all objects with number1.
Console.WriteLine("Type of number1 and number2 are equal: {0}",
Object.ReferenceEquals(t, number2.GetType()))
Console.WriteLine("Type of number1 and number3 are equal: {0}",
Object.ReferenceEquals(t, number3.GetType()))
Console.WriteLine("Type of number1 and number4 are equal: {0}",
Object.ReferenceEquals(t, number4.GetType()))
End Sub
End Module
' The example displays the following output:
' Type of number1 and number2 are equal: False
' Type of number1 and number3 are equal: False
' Type of number1 and number4 are equal: True