Aracılığıyla paylaş


System.Type sınıfı

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 Char
    
    let 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 Char
    
    Module 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 Char
    
  • Statik 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 Type nesneleri 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. (Module veya 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 Type nesnesi 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 eden CLSID nesnesini 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 Type nesnesi döndürür.

  • C# typeof işleci, C++ typeid işleci ve Visual Basic GetType işleci bir tür için Type nesnesini 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 true nesnesi 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' ref Visual Basic'te) temsil eden ByRef nesneler 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