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ı işlevin System.Reflection köküdür ve meta verilere erişmenin birincil yoludur. Bir tür bildirimi, bir türün üyeleri (bir sınıfın oluşturucuları, yöntemleri, alanları, özellikleri ve olayları gibi) ve sınıfın dağıtıldığı modül ve derleme hakkında bilgi almak için üyelerini Type 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 olması ReflectionPermissiongerekir. Bkz. Düşünceler ion için Güvenlik Konuları.

Type , birden çok uygulamaya izin veren soyut bir temel sınıftır. Sistem her zaman türetilmiş sınıfını 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.

Not

Çok iş parçacıklı senaryolarda, verilere erişimi static eşitlemek için nesneleri kilitlemeyinType. Üzerinde denetiminizin olmadığı diğer kodlar da sınıf türünüzü kilitler. Bu kilitlenmeye neden olabilir. Bunun yerine, özel static bir nesneyi kilitleyerek statik verilere erişimi eşitleyin.

Not

Türetilmiş bir sınıf, çağıran kodun temel sınıflarının korumalı üyelerine erişebilir. Ayrıca, çağıran kodun derlemesinin derleme üyelerine erişim izni verilir. Kural olarak, erken bağlanan kodda erişim iznine sahipseniz, geç bağlanan kodda da erişime izin verilir.

Not

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ürün bir örneğinden eşzamanlı olarak okuyabilir. sınıfının bir örneği Type aşağıdaki türlerden herhangi birini temsil edebilir:

  • Sınıflar
  • Değer türleri
  • Diziler
  • Arabirimler
  • Listelemeler
  • Temsilciler
  • Genel türler ve genel tür tanımları oluşturma
  • Tür bağımsız değişkenleri ve tür parametreleri, genel tür tanımları ve genel yöntem tanımları

Tür nesnesi alma

Type Belirli bir türle ilişkili nesne aşağıdaki yollarla elde edilebilir:

  • Örnek yöntemi, bir Type örneğin Object.GetType türünü temsil eden bir nesne döndürür. Tüm yönetilen türler türünden Objecttüretildiği için GetType yöntemi herhangi bir türün örneğinde çağrılabilir.

    Aşağıdaki örnek, bir nesne dizisindeki Object.GetType her nesnenin çalışma zamanı türünü belirlemek için yöntemini çağırır.

    object[] values = { "word", true, 120, 136.34, 'a' };
    foreach (var value in values)
        Console.WriteLine("{0} - type {1}", value,
                          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öntemler, tam adıyla belirtilen bir türü temsil eden bir nesne döndürür Type .

  • Module.GetTypes, Module.GetTypeve Module.FindTypes yöntemleri bir modülde tanımlanan türleri temsil eden nesneler döndürürType. İlk yöntem, bir modülde tanımlanan tüm genel ve özel türler için bir nesne dizisi Type elde etmek için kullanılabilir. (veya yöntemi aracılığıyla Assembly.GetModule veya Assembly.GetModules özelliği aracılığıyla bir örneğini ModuleType.Module alabilirsiniz.)

  • System.Reflection.Assembly nesnesi, , Assembly.GetTypesve Assembly.GetExportedTypesgibi Assembly.GetTypebir derlemede tanımlanan sınıfları almak için bir dizi yöntem içerir.

  • yöntemi, FindInterfaces bir tür tarafından desteklenen arabirim türlerinin filtrelenmiş bir listesini döndürür.

  • yöntemi, GetElementType öğesini temsil eden bir Type nesne döndürür.

  • GetInterfaces ve GetInterface yöntemleri, bir tür tarafından desteklenen arabirim türlerini temsil eden nesneler döndürürType.

  • yöntemi, GetTypeArray rastgele bir nesne kümesi tarafından belirtilen türleri temsil eden bir nesne dizisi Type döndürür. Nesneler türünde Objectbir dizi ile belirtilir.

  • GetTypeFromProgID COM birlikte çalışabilirliği için ve GetTypeFromCLSID yöntemleri sağlanır. veya CLSIDtarafından belirtilen türü temsil eden bir TypeProgID nesne döndürür.

  • birlikte GetTypeFromHandle çalışabilirlik için yöntemi sağlanır. Sınıf tanıtıcısı tarafından belirtilen türü temsil eden bir nesne döndürür Type .

  • C# typeof işleci, C++ typeid işleci ve Visual Basic GetType işleci bir tür için nesnesini alır Type .

  • MakeGenericType yöntemi, özelliği döndürürse ContainsGenericParameterstrueaçık bir yapı türü olan ve aksi takdirde kapalı bir yapı türü olan, bir yapılı genel türü temsil eden bir nesne döndürürType. Genel bir türün örneği yalnızca kapalıysa oluşturulabilir.

  • , ve yöntemleri sırasıyla, belirtilen türde bir diziyi, belirtilen türe yönelik bir işaretçiyi ve başvuru parametresinin türünü (refC#, F# ByRef dilinde 'byref' ve Visual Basic'te) temsil eden nesneler döndürürType.MakeByRefTypeMakePointerTypeMakeArrayType

Tür nesnelerini eşitlik için karşılaştırma

Bir Type türü temsil eden bir nesne benzersizdir; diğer bir ifadeyle, iki Type nesne başvurusu aynı nesneye başvurur ve yalnızca aynı türü temsil ederlerse. Bu, başvuru eşitliği kullanılarak nesnelerin karşılaştırılmasını Type sağlar. Aşağıdaki örnek, aynı türde olup olmadıklarını belirlemek için bir dizi tamsayı değerini temsil eden nesneleri karşılaştırır Type .

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: {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()));

// 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