Type.GetType Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Belirtilen türü temsil eden bir Type nesne alır.
Aşırı Yüklemeler
| Name | Description |
|---|---|
| GetType() |
Geçerli Typealır. |
| GetType(String) |
Type Belirtilen ada sahip olan öğesini alır ve büyük/küçük harfe duyarlı bir arama gerçekleştirir. |
| GetType(String, Boolean) |
Type belirtilen ada sahip olan öğesini alır, büyük/küçük harfe duyarlı bir arama gerçekleştirir ve tür bulunamazsa özel durum oluşturup oluşturmayacağını belirtir. |
| GetType(String, Boolean, Boolean) |
Type türü bulunamazsa özel durum oluşturup oluşturmayacağını ve büyük/küçük harfe duyarlı bir arama yapılıp yapılmayacağını belirterek belirtilen ada sahip değerini alır. |
| GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) |
Türü belirtilen ada sahip alır ve isteğe bağlı olarak derlemeyi ve türü çözümlemek için özel yöntemler sağlar. |
| GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean) |
Belirtilen ada sahip türü alır, tür bulunamazsa özel durum oluşturup oluşturmayacağını belirtir ve isteğe bağlı olarak derlemeyi ve türü çözümlemek için özel yöntemler sağlar. |
| GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) |
Belirtilen ada sahip türü alır, büyük/küçük harfe duyarlı bir arama yapılıp yapılmayacağını ve tür bulunamazsa özel durum oluşturup oluşturmayacağını belirtir ve isteğe bağlı olarak derlemeyi ve türü çözümlemek için özel yöntemler sağlar. |
GetType()
- Kaynak:
- Type.cs
- Kaynak:
- Type.cs
- Kaynak:
- Type.cs
- Kaynak:
- Type.cs
- Kaynak:
- Type.cs
Geçerli Typealır.
public:
Type ^ GetType();
public:
virtual Type ^ GetType();
public Type GetType();
override this.GetType : unit -> Type
Public Function GetType () As Type
Döndürülenler
Geçerli Type.
Uygulamalar
Özel durumlar
Sınıf başlatıcısı çağrılır ve bir özel durum oluşturur.
Ayrıca bkz.
Şunlara uygulanır
GetType(String)
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
Type Belirtilen ada sahip olan öğesini alır ve büyük/küçük harfe duyarlı bir arama gerçekleştirir.
public:
static Type ^ GetType(System::String ^ typeName);
public static Type GetType(string typeName);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName);
public static Type? GetType(string typeName);
static member GetType : string -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string -> Type
Public Shared Function GetType (typeName As String) As Type
Parametreler
- typeName
- String
Alınacak türün derleme nitelikli adı. Bkz. AssemblyQualifiedName. Tür şu anda yürütülen derlemede veya mscorlib.dll/System.Private.CoreLib.dlliçindeyse, ad alanına göre nitelenmiş tür adını sağlamak yeterlidir.
Döndürülenler
Bulunursa, belirtilen ada sahip tür; aksi takdirde , null.
- Öznitelikler
Özel durumlar
typeName, null'e eşittir.
Sınıf başlatıcısı çağrılır ve bir özel durum oluşturur.
typeName, işaretçi türüne, türüne veya ByRef tür bağımsız değişkenlerinden biri olarak sahip olan genel bir Void türü temsil eder.
-veya-
typeName , yanlış sayıda tür bağımsız değişkeni olan genel bir türü temsil eder.
-veya-
typeName genel bir türü temsil eder ve tür bağımsız değişkenlerinden biri ilgili tür parametresinin kısıtlamalarını karşılamaz.
typeName geçersiz bir türü, örneğin bir dizisini TypedReferencetemsil eder.
Derleme veya bağımlılıklarından biri bulundu, ancak yüklenemedi.
Not: Windows Store uygulamaları için .NET veya Portable Sınıf Kitaplığı bunun yerine IOException temel sınıf özel durumunu yakalayın.
Derleme, şu anda yüklü olan çalışma zamanı için geçerli değil.
Örnekler
Aşağıdaki örnek, System.Int32 türünü alır ve özelliğini FullNamegörüntülemek System.Int32 için bu tür nesnesini kullanır.
using System;
class GetTypeExample
{
public static void Main()
{
try {
// Get the type of a specified class.
Type myType1 = Type.GetType("System.Int32");
Console.WriteLine("The full name is {0}.\n", myType1.FullName);
}
catch (TypeLoadException e)
{
Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type myType2 = Type.GetType("NoneSuch", true);
Console.WriteLine("The full name is {0}.", myType2.FullName);
}
catch(TypeLoadException e) {
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
}
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
open System
try
// Get the type of a specified class.
let myType1 = Type.GetType "System.Int32"
printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type System.Int32"
try
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
let myType2 = Type.GetType("NoneSuch", true)
printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
Class Example
Public Shared Sub Main()
Try
' Get the type of the specified class.
Dim myType1 As Type = Type.GetType("System.Int32")
Console.WriteLine("The full name is {0}.", myType1.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type System.Int32",
e.GetType().Name)
End Try
Console.WriteLine()
Try
' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Dim myType2 As Type = Type.GetType("NoneSuch", True)
Console.WriteLine("The full name is {0}.", myType2.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
End Try
End Sub
End Class
' The example displays the following output:
' The full name is System.Int32.
'
' TypeLoadException: Unable to load type NoneSuch
Açıklamalar
yöntemini kullanarak GetType başka bir derlemedeki bir Type tür için nesnesi elde edebilirsiniz. Derlemenin nitelenmiş adını biliyorsanız ve bu adı öğesinden AssemblyQualifiedNameelde edebilirsiniz.
GetType içinde belirtilen derlemenin yüklenmesine typeNameneden olur. Ayrıca yöntemini kullanarak Assembly.Load bir derleme yükleyebilir ve nesneleri almak Assembly.GetType için veya Assembly.GetTypes yöntemini kullanabilirsinizType. Bir tür derleme zamanında programınız tarafından bilinen bir derlemedeyse, C# dilinde typeof veya Visual Basic'da GetType işlecini kullanmak daha verimlidir.
Note
Bulunamazsa typeName yöntemine yapılan GetType(String) çağrı döndürür null. Özel durum oluşturmaz. Özel durumun oluşturup oluşturmadığını denetlemek için parametresi olan GetType yöntemin throwOnError aşırı yüklemesini çağırın.
Yalnızca .NET Framework: GetType yalnızca diskten yüklenen derlemelerde çalışır. Hizmetleri kullanarak GetType tanımlanan dinamik derlemede tanımlanan bir türü aramak için çağırırsanız System.Reflection.Emit tutarsız davranışlar alabilirsiniz. Bu davranış, dinamik derlemenin kalıcı olup olmadığına, yani sabit listesi veya RunAndSave erişim modları kullanılarak Save oluşturulup oluşturulmadığına System.Reflection.Emit.AssemblyBuilderAccess bağlıdır. Dinamik derleme kalıcıysa ve çağrılmadan önce GetType diske yazılmışsa, yükleyici diskte kaydedilen derlemeyi bulur, bu derlemeyi yükler ve türü bu derlemeden alır. Derleme çağrıldığında diske kaydedilmemişse GetType yöntemi döndürür null.
GetType geçici dinamik derlemeleri anlamaz; bu nedenle, geçici dinamik derlemedeki bir türü almak için çağrısı GetType döndürür null.
.NET Framework'te dinamik modülde GetType kullanmak için AppDomain.AssemblyResolve olayına abone olun ve kaydetmeden önce GetType çağırın. Aksi takdirde, derlemenin bellekte iki kopyasını alırsınız.
.NET Core 3.0 ve sonraki sürümlerde, bu API tarafından tetiklenen derleme yükleri geçerli AssemblyLoadContext.CurrentContextualReflectionContext değerinden etkilenir.
Aşağıdaki tabloda, bir türe yansıtılırken yöntemler tarafından döndürülen temel sınıf üyeleri gösterilmektedir.
| Üye Türü | Static | Statik Olmayan |
|---|---|---|
| Yapıcı | No | No |
| Alan | No | Yes. Alan her zaman isim ve imzaya göre gizli olur. |
| Olay | Uygulanamaz | Yaygın tür sistemi kuralı, özniteliği uygulayan yöntemlerdeki devralma ile aynıdır. Yansıma, özellikleri ada ve imzaya göre gizle olarak ele alır. Aşağıdaki 2. nota bakın. |
| Yöntem | No | Yes. Bir yöntem (hem sanal hem de sanal olmayan) isim odaklı gizleme veya isim ve imza odaklı gizleme olabilir. |
| İç İçe Yerleştirilmiş Tür | No | No |
| Mülkiyet | Uygulanamaz | Yaygın tür sistemi kuralı, özniteliği uygulayan yöntemlerdeki devralma ile aynıdır. Yansıma, özellikleri ada ve imzaya göre gizle olarak ele alır. Aşağıdaki 2. nota bakın. |
Ad ve imzaya göre gizleme, özel değiştiriciler, dönüş türleri, parametre türleri, sentineller ve yönetilmeyen çağırma kuralları dahil olmak üzere, imzanın tüm parçalarını dikkate alır. Bu ikili karşılaştırmadır.
Yansıma için, özellikler ve olaylar ada ve imzaya göre gizlenir. Temel sınıfta hem get hem de set erişimcisine sahip bir özelliğiniz varsa, ancak türetilen sınıfın yalnızca bir get erişimcisi varsa, türetilmiş sınıf özelliği temel sınıf özelliğini gizler ve temel sınıfta ayarlayıcıya erişemezsiniz.
Özel öznitelikler ortak tür sisteminin bir parçası değildir.
Diziler veya COM türleri, kullanılabilir sınıflar tablosuna zaten yüklenmedikleri sürece aranmıyor.
typeName ad alanına göre nitelenmiş tür adı veya derleme adı belirtimi içeren bir derleme nitelikli adı olabilir. Bkz. AssemblyQualifiedName.
Ad alanını içeriyorsa ancak derleme adını içermiyorsa typeName , bu yöntem yalnızca çağıran nesnenin derlemesini ve mscorlib.dll/System.Private.CoreLib.dllbu sırada arar. typeName, kısmi veya tam derleme adıyla tam olarak nitelenmişse, bu yöntem belirtilen derlemede arar. Derlemenin tanımlayıcı bir adı varsa, tam bir derleme adı gerekir.
AssemblyQualifiedName özelliği iç içe türler, derleme adı ve genel tür bağımsız değişkenleri dahil olmak üzere tam tür adı döndürür. Ortak dil çalışma zamanını destekleyen tüm derleyiciler iç içe bir sınıfın basit adını yayar ve yansıma sorgulandığında aşağıdaki kurallar uyarınca bir mangled adı oluşturur.
Note
İşlemci mimarisi, derleme kimliğinin bir parçasıdır ve derleme adı dizelerinin bir parçası olarak belirtilebilir. Örneğin, "ProcessorArchitecture=msil". Ancak, uyumluluk nedeniyle özelliği tarafından döndürülen dizeye AssemblyQualifiedName dahil değildir. Ayrıca, bir AssemblyName nesne oluşturup bunu yöntemin uygun bir aşırı yüklemesine Load geçirerek de türleri yükleyebilirsiniz. Ardından derlemeden türleri yüklemek için yöntemini kullanabilirsiniz Assembly.GetType . Ayrıca bkz. AssemblyName.ProcessorArchitecture.
| Ayırıcı | Anlamı |
|---|---|
| Ters eğik çizgi (\) | Kaçış karakteri. |
| Backtick (') | Genel bir türün adının sonunda bulunan tür parametrelerinin sayısını temsil eden bir veya daha fazla basamaktan önce. |
| Köşeli Ayraçlar ([]) | Genel tür bağımsız değişken listesini, genel bir genel tür için içine alın; bir tür bağımsız değişken listesi içinde, derleme nitelikli bir türü içine alın. |
| Virgül (,) | Derleme adından önce. |
| Dönem (.) | Ad alanı tanımlayıcılarını belirtir. |
| Artı işareti (+) | İç içe geçmiş bir sınıftan önce. |
Örneğin, bir sınıfın tam adı şu şekilde görünebilir:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Ad alanı TopNamespace.Sub+Namespace ise, dizenin iç içe ayırıcı olarak yorumlanmasını önlemek için artı işaretinden (+) önce bir kaçış karakteri (\) olması gerekir. Yansıma bu dizeyi aşağıdaki gibi yayar:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
"++" "\+\+" olur ve "\" "\\" olur.
Bu nitelenmiş ad kalıcı hale gelebilir ve daha sonra yüklemek Typeiçin kullanılabilir. araması yapmak ve yüklemek Typeiçin yalnızca tür adıyla veya derleme türü adıyla kullanın GetType . GetType tür adıyla yalnızca çağıranın derlemesinde ve ardından Sistem derlemesinde öğesini arar Type . GetType derleme nitelikli tür adıyla, herhangi bir derlemede öğesini Type arar.
Tür adları, türün başvuru türü mü, işaretçi türü mü yoksa dizi türü mü olduğu gibi türle ilgili ek bilgileri belirten sondaki karakterleri içerebilir. Bu sonundaki karakterler olmadan tür adını almak için t.GetElementType().ToString()kullanın; burada t türdür.
Boşluklar, derleme adı dışındaki tüm tür adı bileşenlerinde geçerlidir. Derleme adında, ',' ayırıcıdan önceki boşluklar geçerlidir, ancak ',' ayırıcıdan sonraki boşluklar yoksayılır.
Genel bir türün adı, arka uç (') ve ardından genel tür bağımsız değişkenlerinin sayısını temsil eden basamaklarla biter. Bu ad düzenlemesinin amacı, derleyicilerin aynı ada sahip ancak aynı kapsamda farklı sayıda tür parametresi bulunan genel türleri desteklemesine izin vermektir. Örneğin yansıma, Visual Basic
Genel türler için tür bağımsız değişkeni listesi köşeli ayraç içine alınır ve tür bağımsız değişkenleri virgülle ayrılır. Örneğin, bir genel Dictionary<TKey,TValue> iki tür parametresine sahiptir.
Dictionary<TKey,TValue> Türü olan anahtarlardan biri MyTypeString aşağıdaki gibi gösterilebilir:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Tür bağımsız değişken listesinde derleme nitelikli bir tür belirtmek için, derleme nitelikli türünü köşeli ayraç içine alın. Aksi takdirde, derleme nitelikli adının bölümlerini ayıran virgüller ek tür bağımsız değişkenlerini sınırlandırma olarak yorumlanır. Örneğin, Dictionary<TKey,TValue>MyType türünde anahtarlar Stringiçeren fromMyAssembly.dllaşağıdaki gibi belirtilebilir:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Note
Derlemeye uygun bir tür, yalnızca tür parametre listesinde göründüğünde köşeli ayraç içine alınabilir. Tür parametre listelerindeki nitelenmiş ve nitelenmemiş türler için derlemeleri arama kuralları, nitelenmiş ve nitelenmemiş nongeneric türlerin kurallarıyla aynıdır.
Null atanabilir türler, genel türlerin özel bir örneğidir. Örneğin, null atanabilir Int32 değeri "System.Nullable'1[System.Int32]" dizesiyle gösterilir.
Note
Tür işleçlerini kullanarak null atanabilir türler de alabilirsiniz. Örneğin, null atanabilir Boolean türü C# dilinde typeof(Nullable<bool>) ve Visual Basic'da GetType(Nullable(Of Boolean)) tarafından döndürülür.
Aşağıdaki tabloda, çeşitli türler için kullandığınız GetType söz dizimi gösterilmektedir.
| Almak için | Kullan |
|---|---|
| Null atanabilir Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Yönetilmeyen işaretçi MyType |
Type.GetType("MyType*") |
İşaretçinin yönetilmeyen işaretçisi MyType |
Type.GetType("MyType**") |
Yönetilen işaretçi veya başvuru MyType |
Type.GetType("MyType&"). İşaretçilerden farklı olarak başvuruların bir düzeyle sınırlı olduğunu unutmayın. |
| Üst sınıf ve iç içe geçmiş sınıf | Type.GetType("MyParentClass+MyNestedClass") |
| Alt sınırı 0 olan tek boyutlu bir dizi | Type.GetType("MyType[]") |
| Bilinmeyen alt sınıra sahip tek boyutlu bir dizi | Type.GetType("MyType[*]") |
| N boyutlu bir dizi | Köşeli ayraçların içinde toplam n-1 kez virgül (,) olur. Örneğin, System.Object[,,] üç boyutlu Object bir diziyi temsil eder. |
| Tek boyutlu dizilerden oluşan bir dizi | Type.GetType("MyType[][]") |
| Bilinmeyen alt sınırları olan dikdörtgen bir iki boyutlu dizi | Type.GetType("MyType[,]") |
| Tek tür bağımsız değişkeni olan genel bir tür | Type.GetType("MyGenericType`1[MyType]") |
| İki tür bağımsız değişkeni olan genel bir tür | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
| İki derlemeye uygun tür bağımsız değişkenine sahip genel bir tür | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
| Derleme nitelikli tür bağımsız değişkenine sahip derleme nitelikli genel tür | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
| Tür bağımsız değişkeni iki tür bağımsız değişkeni olan genel bir tür | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Ayrıca bkz.
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Tam Tür Adlarını Belirtme
Şunlara uygulanır
GetType(String, Boolean)
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
Type belirtilen ada sahip olan öğesini alır, büyük/küçük harfe duyarlı bir arama gerçekleştirir ve tür bulunamazsa özel durum oluşturup oluşturmayacağını belirtir.
public:
static Type ^ GetType(System::String ^ typeName, bool throwOnError);
public static Type GetType(string typeName, bool throwOnError);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, bool throwOnError);
public static Type? GetType(string typeName, bool throwOnError);
static member GetType : string * bool -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean) As Type
Parametreler
- typeName
- String
Alınacak türün derleme nitelikli adı. Bkz. AssemblyQualifiedName. Tür şu anda yürütülen derlemede veya mscorlib.dll/System.Private.CoreLib.dlliçindeyse, ad alanına göre nitelenmiş tür adını sağlamak yeterlidir.
- throwOnError
- Boolean
true türü bulunamazsa özel durum oluşturma; false öğesini döndürecek null. Belirtme, false diğer bazı özel durum koşullarını da gizler, ancak tümünü gizlemez. Özel Durumlar bölümüne bakın.
Döndürülenler
Belirtilen ada sahip tür. Tür bulunamazsa, throwOnError parametresi döndürülür veya null bir özel durum oluşturulur belirtir. Bazı durumlarda, değerinden throwOnErrorbağımsız olarak bir özel durum oluşturulur. Özel Durumlar bölümüne bakın.
- Öznitelikler
Özel durumlar
typeName, null'e eşittir.
Sınıf başlatıcısı çağrılır ve bir özel durum oluşturur.
throwOnError ve true türü bulunamadı.
-veya-
throwOnError
true ve typeName ekli sekme gibi geçersiz karakterler içeriyor.
-veya-
throwOnError ve truetypeName boş bir dizedir.
-veya-
throwOnError
true ve typeName geçersiz boyuta sahip bir dizi türünü temsil eder.
-veya-
typeName bir dizisini TypedReferencetemsil eder.
throwOnError
true ve typeName geçersiz söz dizimi içeriyor. Örneğin, "MyType[,*,]".
-veya-
typeName, işaretçi türüne, türüne veya ByRef tür bağımsız değişkenlerinden biri olarak sahip olan genel bir Void türü temsil eder.
-veya-
typeName , yanlış sayıda tür bağımsız değişkeni olan genel bir türü temsil eder.
-veya-
typeName genel bir türü temsil eder ve tür bağımsız değişkenlerinden biri ilgili tür parametresinin kısıtlamalarını karşılamaz.
throwOnError ve true derleme veya bağımlılıklarından biri bulunamadı.
Derleme veya bağımlılıklarından biri bulundu, ancak yüklenemedi.
Not: Windows Store uygulamaları için .NET veya Portable Sınıf Kitaplığı bunun yerine IOException temel sınıf özel durumunu yakalayın.
Derleme veya bağımlılıklarından biri şu anda yüklü olan çalışma zamanı için geçerli değil.
Örnekler
Aşağıdaki örnek, System.Int32 türünü alır ve özelliğini FullNamegörüntülemek System.Int32 için bu tür nesnesini kullanır. Tür nesnesi var olmayan bir derlemeye başvuruyorsa, bu örnek bir özel durum oluşturur.
using System;
class GetTypeExample
{
public static void Main()
{
try {
// Get the type of a specified class.
Type myType1 = Type.GetType("System.Int32");
Console.WriteLine("The full name is {0}.\n", myType1.FullName);
}
catch (TypeLoadException e)
{
Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type myType2 = Type.GetType("NoneSuch", true);
Console.WriteLine("The full name is {0}.", myType2.FullName);
}
catch(TypeLoadException e) {
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
}
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
open System
try
// Get the type of a specified class.
let myType1 = Type.GetType "System.Int32"
printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type System.Int32"
try
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
let myType2 = Type.GetType("NoneSuch", true)
printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
Class Example
Public Shared Sub Main()
Try
' Get the type of the specified class.
Dim myType1 As Type = Type.GetType("System.Int32")
Console.WriteLine("The full name is {0}.", myType1.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type System.Int32",
e.GetType().Name)
End Try
Console.WriteLine()
Try
' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Dim myType2 As Type = Type.GetType("NoneSuch", True)
Console.WriteLine("The full name is {0}.", myType2.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
End Try
End Sub
End Class
' The example displays the following output:
' The full name is System.Int32.
'
' TypeLoadException: Unable to load type NoneSuch
Açıklamalar
yöntemini kullanarak GetType başka bir derlemedeki bir Type tür için nesnesi elde edebilirsiniz. Derlemenin nitelenmiş adını biliyorsanız ve bu adı öğesinden AssemblyQualifiedNameelde edebilirsiniz.
GetType içinde belirtilen derlemenin yüklenmesine typeNameneden olur. Ayrıca yöntemini kullanarak Assembly.Load bir derleme yükleyebilir ve nesneleri almak Assembly.GetType için veya Assembly.GetTypes yöntemini kullanabilirsinizType. Bir tür derleme zamanında programınız tarafından bilinen bir derlemedeyse, C# dilinde typeof veya Visual Basic'da GetType işlecini kullanmak daha verimlidir.
Yalnızca .NET Framework: GetType yalnızca diskten yüklenen derlemelerde çalışır. Hizmetleri kullanarak GetType tanımlanan dinamik derlemede tanımlanan bir türü aramak için çağırırsanız System.Reflection.Emit tutarsız davranışlar alabilirsiniz. Bu davranış, dinamik derlemenin kalıcı olup olmadığına, yani sabit listesi veya RunAndSave erişim modları kullanılarak Save oluşturulup oluşturulmadığına System.Reflection.Emit.AssemblyBuilderAccess bağlıdır. Dinamik derleme kalıcıysa ve çağrılmadan önce GetType diske yazılmışsa, yükleyici diskte kaydedilen derlemeyi bulur, bu derlemeyi yükler ve türü bu derlemeden alır. Derleme çağrıldığında diske kaydedilmemişse GetType yöntemi döndürür null.
GetType geçici dinamik derlemeleri anlamaz; bu nedenle, geçici dinamik derlemedeki bir türü almak için çağrısı GetType döndürür null.
.NET Framework'te dinamik modülde GetType kullanmak için AppDomain.AssemblyResolve olayına abone olun ve kaydetmeden önce GetType çağırın. Aksi takdirde, derlemenin bellekte iki kopyasını alırsınız.
.NET Core 3.0 ve sonraki sürümlerde, bu API tarafından tetiklenen derleme yükleri geçerli AssemblyLoadContext.CurrentContextualReflectionContext değerinden etkilenir.
throwOnError parametresi, tür bulunamadığında ne olacağını belirtir ve özel durumlar bölümünde açıklandığı gibi diğer bazı özel durum koşullarını gizler. bazı özel durumlar değeri throwOnErrorne olursa olsun oluşturulur. Örneğin, tür bulunur ancak yüklenemezse, olsa TypeLoadExceptionthrowOnErrorbile bir false oluşturulur.
Aşağıdaki tabloda, bir türe yansıtılırken yöntemler tarafından döndürülen temel sınıf üyeleri gösterilmektedir.
| Üye Türü | Static | Statik Olmayan |
|---|---|---|
| Yapıcı | No | No |
| Alan | No | Yes. Alan her zaman isim ve imzaya göre gizli olur. |
| Olay | Uygulanamaz | Yaygın tür sistemi kuralı, özniteliği uygulayan yöntemlerdeki devralma ile aynıdır. Yansıma, özellikleri ada ve imzaya göre gizle olarak ele alır. Aşağıdaki 2. nota bakın. |
| Yöntem | No | Yes. Bir yöntem (hem sanal hem de sanal olmayan) isim odaklı gizleme veya isim ve imza odaklı gizleme olabilir. |
| İç İçe Yerleştirilmiş Tür | No | No |
| Mülkiyet | Uygulanamaz | Yaygın tür sistemi kuralı, özniteliği uygulayan yöntemlerdeki devralma ile aynıdır. Yansıma, özellikleri ada ve imzaya göre gizle olarak ele alır. Aşağıdaki 2. nota bakın. |
Ad ve imzaya göre gizleme, özel değiştiriciler, dönüş türleri, parametre türleri, sentineller ve yönetilmeyen çağırma kuralları dahil olmak üzere, imzanın tüm parçalarını dikkate alır. Bu ikili karşılaştırmadır.
Yansıma için, özellikler ve olaylar ada ve imzaya göre gizlenir. Temel sınıfta hem get hem de set erişimcisine sahip bir özelliğiniz varsa, ancak türetilen sınıfın yalnızca bir get erişimcisi varsa, türetilmiş sınıf özelliği temel sınıf özelliğini gizler ve temel sınıfta ayarlayıcıya erişemezsiniz.
Özel öznitelikler ortak tür sisteminin bir parçası değildir.
Diziler veya COM türleri, kullanılabilir sınıflar tablosuna zaten yüklenmedikleri sürece aranmıyor.
typeName ad alanına göre nitelenmiş tür adı veya derleme adı belirtimi içeren bir derleme nitelikli adı olabilir. Bkz. AssemblyQualifiedName.
Ad alanını içeriyorsa ancak derleme adını içermiyorsa typeName , bu yöntem yalnızca çağıran nesnenin derlemesini ve mscorlib.dll/System.Private.CoreLib.dllbu sırada arar. typeName, kısmi veya tam derleme adıyla tam olarak nitelenmişse, bu yöntem belirtilen derlemede arar. Derlemenin tanımlayıcı bir adı varsa, tam bir derleme adı gerekir.
AssemblyQualifiedName özelliği iç içe türler, derleme adı ve genel bağımsız değişkenler dahil olmak üzere tam tür adı döndürür. Ortak dil çalışma zamanını destekleyen tüm derleyiciler iç içe bir sınıfın basit adını yayar ve yansıma sorgulandığında aşağıdaki kurallar uyarınca bir mangled adı oluşturur.
Note
İşlemci mimarisi, derleme kimliğinin bir parçasıdır ve derleme adı dizelerinin bir parçası olarak belirtilebilir. Örneğin, "ProcessorArchitecture=msil". Ancak, uyumluluk nedeniyle özelliği tarafından döndürülen dizeye AssemblyQualifiedName dahil değildir. Ayrıca, bir AssemblyName nesne oluşturup bunu yöntemin uygun bir aşırı yüklemesine Load geçirerek de türleri yükleyebilirsiniz. Ardından derlemeden türleri yüklemek için yöntemini kullanabilirsiniz Assembly.GetType . Ayrıca bkz. AssemblyName.ProcessorArchitecture.
| Ayırıcı | Anlamı |
|---|---|
| Ters eğik çizgi (\) | Kaçış karakteri. |
| Backtick (') | Genel bir türün adının sonunda bulunan tür parametrelerinin sayısını temsil eden bir veya daha fazla basamaktan önce. |
| Köşeli Ayraçlar ([]) | Genel tür bağımsız değişken listesini, genel bir genel tür için içine alın; bir tür bağımsız değişken listesi içinde, derleme nitelikli bir türü içine alın. |
| Virgül (,) | Derleme adından önce. |
| Dönem (.) | Ad alanı tanımlayıcılarını belirtir. |
| Artı işareti (+) | İç içe geçmiş bir sınıftan önce. |
Örneğin, bir sınıfın tam adı şu şekilde görünebilir:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Ad alanı TopNamespace.Sub+Namespace ise, dizenin iç içe ayırıcı olarak yorumlanmasını önlemek için artı işaretinden (+) önce bir kaçış karakteri (\) olması gerekir. Yansıma bu dizeyi aşağıdaki gibi yayar:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
"++" "\+\+" olur ve "\" "\\" olur.
Bu nitelenmiş ad kalıcı hale gelebilir ve daha sonra yüklemek Typeiçin kullanılabilir. araması yapmak ve yüklemek Typeiçin yalnızca tür adıyla veya derleme türü adıyla kullanın GetType . GetType tür adıyla yalnızca çağıranın derlemesinde ve ardından Sistem derlemesinde öğesini arar Type . GetType derleme nitelikli tür adıyla, herhangi bir derlemede öğesini Type arar.
Tür adları, türün başvuru türü mü, işaretçi türü mü yoksa dizi türü mü olduğu gibi türle ilgili ek bilgileri belirten sondaki karakterleri içerebilir. Bu sonundaki karakterler olmadan tür adını almak için t.GetElementType().ToString()kullanın; burada t türdür.
Boşluklar, derleme adı dışındaki tüm tür adı bileşenlerinde geçerlidir. Derleme adında, ',' ayırıcıdan önceki boşluklar geçerlidir, ancak ',' ayırıcıdan sonraki boşluklar yoksayılır.
Genel bir türün adı, arka uç (') ve ardından genel tür bağımsız değişkenlerinin sayısını temsil eden basamaklarla biter. Bu ad düzenlemesinin amacı, derleyicilerin aynı ada sahip ancak aynı kapsamda farklı sayıda tür parametresi bulunan genel türleri desteklemesine izin vermektir. Örneğin yansıma, Visual Basic
Genel türler için tür bağımsız değişkeni listesi köşeli ayraç içine alınır ve tür bağımsız değişkenleri virgülle ayrılır. Örneğin, bir genel Dictionary<TKey,TValue> iki tür parametresine sahiptir.
Dictionary<TKey,TValue> Türü olan anahtarlardan biri MyTypeString aşağıdaki gibi gösterilebilir:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Tür bağımsız değişken listesinde derleme nitelikli bir tür belirtmek için, derleme nitelikli türünü köşeli ayraç içine alın. Aksi takdirde, derleme nitelikli adının bölümlerini ayıran virgüller ek tür bağımsız değişkenlerini sınırlandırma olarak yorumlanır. Örneğin, MyAssembly.dlltüründe anahtarlara Dictionary<TKey,TValue>sahip bir MyTypeString türü aşağıdaki gibi belirtilebilir:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Note
Derlemeye uygun bir tür, yalnızca tür parametre listesinde göründüğünde köşeli ayraç içine alınabilir. Tür parametre listelerindeki nitelenmiş ve nitelenmemiş türler için derlemeleri arama kuralları, nitelenmiş ve nitelenmemiş nongeneric türlerin kurallarıyla aynıdır.
Null atanabilir türler, genel türlerin özel bir örneğidir. Örneğin, null atanabilir Int32 değeri "System.Nullable'1[System.Int32]" dizesiyle gösterilir.
Note
Tür işleçlerini kullanarak null atanabilir türler de alabilirsiniz. Örneğin, null atanabilir Boolean türü C# dilinde typeof(Nullable<bool>) ve Visual Basic'da GetType(Nullable(Of Boolean)) tarafından döndürülür.
Aşağıdaki tabloda, çeşitli türler için kullandığınız GetType söz dizimi gösterilmektedir.
| Almak için | Kullan |
|---|---|
| Null atanabilir Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Yönetilmeyen işaretçi MyType |
Type.GetType("MyType*") |
İşaretçinin yönetilmeyen işaretçisi MyType |
Type.GetType("MyType**") |
Yönetilen işaretçi veya başvuru MyType |
Type.GetType("MyType&"). İşaretçilerden farklı olarak başvuruların bir düzeyle sınırlı olduğunu unutmayın. |
| Üst sınıf ve iç içe geçmiş sınıf | Type.GetType("MyParentClass+MyNestedClass") |
| Alt sınırı 0 olan tek boyutlu bir dizi | Type.GetType("MyArray[]") |
| Bilinmeyen alt sınıra sahip tek boyutlu bir dizi | Type.GetType("MyArray[*]") |
| N boyutlu bir dizi | Köşeli ayraçların içinde toplam n-1 kez virgül (,) olur. Örneğin, System.Object[,,] üç boyutlu Object bir diziyi temsil eder. |
| İki boyutlu bir dizinin dizisi | Type.GetType("MyArray[][]") |
| Bilinmeyen alt sınırları olan dikdörtgen bir iki boyutlu dizi | Type.GetType("MyArray[,]") |
| Tek tür bağımsız değişkeni olan genel bir tür | Type.GetType("MyGenericType`1[MyType]") |
| İki tür bağımsız değişkeni olan genel bir tür | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
| İki derlemeye uygun tür bağımsız değişkenine sahip genel bir tür | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
| Derleme nitelikli tür bağımsız değişkenine sahip derleme nitelikli genel tür | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
| Tür bağımsız değişkeni iki tür bağımsız değişkeni olan genel bir tür | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Ayrıca bkz.
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Tam Tür Adlarını Belirtme
Şunlara uygulanır
GetType(String, Boolean, Boolean)
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
Type türü bulunamazsa özel durum oluşturup oluşturmayacağını ve büyük/küçük harfe duyarlı bir arama yapılıp yapılmayacağını belirterek belirtilen ada sahip değerini alır.
public:
static Type ^ GetType(System::String ^ typeName, bool throwOnError, bool ignoreCase);
public static Type GetType(string typeName, bool throwOnError, bool ignoreCase);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, bool throwOnError, bool ignoreCase);
public static Type? GetType(string typeName, bool throwOnError, bool ignoreCase);
static member GetType : string * bool * bool -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * bool * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean, ignoreCase As Boolean) As Type
Parametreler
- typeName
- String
Alınacak türün derleme nitelikli adı. Bkz. AssemblyQualifiedName. Tür şu anda yürütülen derlemede veya mscorlib.dll/System.Private.CoreLib.dlliçindeyse, ad alanına göre nitelenmiş tür adını sağlamak yeterlidir.
- throwOnError
- Boolean
true türü bulunamazsa özel durum oluşturma; false öğesini döndürecek null. Belirtme, false diğer bazı özel durum koşullarını da gizler, ancak tümünü gizlemez. Özel Durumlar bölümüne bakın.
- ignoreCase
- Boolean
trueiçin büyük/küçük harfe duyarlı olmayan bir arama yapmak üzere typeNamefalse için büyük/küçük harfe duyarlı bir arama yapmak içintypeName.
Döndürülenler
Belirtilen ada sahip tür. Tür bulunamazsa, throwOnError parametresi döndürülür veya null bir özel durum oluşturulur belirtir. Bazı durumlarda, değerinden throwOnErrorbağımsız olarak bir özel durum oluşturulur. Özel Durumlar bölümüne bakın.
- Öznitelikler
Özel durumlar
typeName, null'e eşittir.
Sınıf başlatıcısı çağrılır ve bir özel durum oluşturur.
throwOnError ve true türü bulunamadı.
-veya-
throwOnError
true ve typeName ekli sekme gibi geçersiz karakterler içeriyor.
-veya-
throwOnError ve truetypeName boş bir dizedir.
-veya-
throwOnError
true ve typeName geçersiz boyuta sahip bir dizi türünü temsil eder.
-veya-
typeName bir dizisini TypedReferencetemsil eder.
throwOnError
true ve typeName geçersiz söz dizimi içeriyor. Örneğin, "MyType[,*,]".
-veya-
typeName, işaretçi türüne, türüne veya ByRef tür bağımsız değişkenlerinden biri olarak sahip olan genel bir Void türü temsil eder.
-veya-
typeName , yanlış sayıda tür bağımsız değişkeni olan genel bir türü temsil eder.
-veya-
typeName genel bir türü temsil eder ve tür bağımsız değişkenlerinden biri ilgili tür parametresinin kısıtlamalarını karşılamaz.
throwOnError ve true derleme veya bağımlılıklarından biri bulunamadı.
Derleme veya bağımlılıklarından biri bulundu, ancak yüklenemedi.
Derleme, şu anda yüklü olan çalışma zamanı için geçerli değil.
Açıklamalar
yöntemini kullanarak GetType başka bir derlemedeki bir Type tür için nesnesi elde edebilirsiniz. Derlemenin nitelenmiş adını biliyorsanız ve bu adı öğesinden AssemblyQualifiedNameelde edebilirsiniz.
GetType içinde belirtilen derlemenin yüklenmesine typeNameneden olur. Ayrıca yöntemini kullanarak Assembly.Load bir derleme yükleyebilir ve nesneleri almak Assembly.GetType için veya Assembly.GetTypes yöntemini kullanabilirsinizType. Bir tür derleme zamanında programınız tarafından bilinen bir derlemedeyse, C# dilinde typeof veya Visual Basic'da GetType işlecini kullanmak daha verimlidir.
Yalnızca .NET Framework: GetType yalnızca diskten yüklenen derlemelerde çalışır. Hizmetleri kullanarak GetType tanımlanan dinamik derlemede tanımlanan bir türü aramak için çağırırsanız System.Reflection.Emit tutarsız davranışlar alabilirsiniz. Bu davranış, dinamik derlemenin kalıcı olup olmadığına, yani sabit listesi veya RunAndSave erişim modları kullanılarak Save oluşturulup oluşturulmadığına System.Reflection.Emit.AssemblyBuilderAccess bağlıdır. Dinamik derleme kalıcıysa ve çağrılmadan önce GetType diske yazılmışsa, yükleyici diskte kaydedilen derlemeyi bulur, bu derlemeyi yükler ve türü bu derlemeden alır. Derleme çağrıldığında diske kaydedilmemişse GetType yöntemi döndürür null.
GetType geçici dinamik derlemeleri anlamaz; bu nedenle, geçici dinamik derlemedeki bir türü almak için çağrısı GetType döndürür null.
.NET Framework'te dinamik modülde GetType kullanmak için AppDomain.AssemblyResolve olayına abone olun ve kaydetmeden önce GetType çağırın. Aksi takdirde, derlemenin bellekte iki kopyasını alırsınız.
.NET Core 3.0 ve sonraki sürümlerde, bu API tarafından tetiklenen derleme yükleri geçerli AssemblyLoadContext.CurrentContextualReflectionContext değerinden etkilenir.
throwOnError parametresi, tür bulunamadığında ne olacağını belirtir ve özel durumlar bölümünde açıklandığı gibi diğer bazı özel durum koşullarını gizler. bazı özel durumlar değeri throwOnErrorne olursa olsun oluşturulur. Örneğin, tür bulunur ancak yüklenemezse, olsa TypeLoadExceptionthrowOnErrorbile bir false oluşturulur.
Aşağıdaki tabloda, bir türe yansıtılırken yöntemler tarafından döndürülen temel sınıf üyeleri gösterilmektedir.
| Üye Türü | Static | Statik Olmayan |
|---|---|---|
| Yapıcı | No | No |
| Alan | No | Yes. Alan her zaman isim ve imzaya göre gizli olur. |
| Olay | Uygulanamaz | Yaygın tür sistemi kuralı, özniteliği uygulayan yöntemlerdeki devralma ile aynıdır. Yansıma, özellikleri ada ve imzaya göre gizle olarak ele alır. Aşağıdaki 2. nota bakın. |
| Yöntem | No | Yes. Bir yöntem (hem sanal hem de sanal olmayan) isim odaklı gizleme veya isim ve imza odaklı gizleme olabilir. |
| İç İçe Yerleştirilmiş Tür | No | No |
| Mülkiyet | Uygulanamaz | Yaygın tür sistemi kuralı, özniteliği uygulayan yöntemlerdeki devralma ile aynıdır. Yansıma, özellikleri ada ve imzaya göre gizle olarak ele alır. Aşağıdaki 2. nota bakın. |
Ad ve imzaya göre gizleme, özel değiştiriciler, dönüş türleri, parametre türleri, sentineller ve yönetilmeyen çağırma kuralları dahil olmak üzere, imzanın tüm parçalarını dikkate alır. Bu ikili karşılaştırmadır.
Yansıma için, özellikler ve olaylar ada ve imzaya göre gizlenir. Temel sınıfta hem get hem de set erişimcisine sahip bir özelliğiniz varsa, ancak türetilen sınıfın yalnızca bir get erişimcisi varsa, türetilmiş sınıf özelliği temel sınıf özelliğini gizler ve temel sınıfta ayarlayıcıya erişemezsiniz.
Özel öznitelikler ortak tür sisteminin bir parçası değildir.
Diziler veya COM türleri, kullanılabilir sınıflar tablosuna zaten yüklenmedikleri sürece aranmıyor.
typeName ad alanına göre nitelenmiş tür adı veya derleme adı belirtimi içeren bir derleme nitelikli adı olabilir. Bkz. AssemblyQualifiedName.
Ad alanını içeriyorsa ancak derleme adını içermiyorsa typeName , bu yöntem yalnızca çağıran nesnenin derlemesini ve mscorlib.dll/System.Private.CoreLib.dllbu sırada arar. typeName, kısmi veya tam derleme adıyla tam olarak nitelenmişse, bu yöntem belirtilen derlemede arar. Derlemenin tanımlayıcı bir adı varsa, tam bir derleme adı gerekir.
AssemblyQualifiedName özelliği iç içe türler, derleme adı ve tür bağımsız değişkenleri dahil olmak üzere tam tür adı döndürür. Ortak dil çalışma zamanını destekleyen tüm derleyiciler iç içe bir sınıfın basit adını yayar ve yansıma sorgulandığında aşağıdaki kurallar uyarınca bir mangled adı oluşturur.
Note
İşlemci mimarisi, derleme kimliğinin bir parçasıdır ve derleme adı dizelerinin bir parçası olarak belirtilebilir. Örneğin, "ProcessorArchitecture=msil". Ancak, uyumluluk nedeniyle özelliği tarafından döndürülen dizeye AssemblyQualifiedName dahil değildir. Ayrıca, bir AssemblyName nesne oluşturup bunu yöntemin uygun bir aşırı yüklemesine Load geçirerek de türleri yükleyebilirsiniz. Ardından derlemeden türleri yüklemek için yöntemini kullanabilirsiniz Assembly.GetType . Ayrıca bkz. AssemblyName.ProcessorArchitecture.
| Ayırıcı | Anlamı |
|---|---|
| Ters eğik çizgi (\) | Kaçış karakteri. |
| Backtick (') | Genel bir türün adının sonunda bulunan tür parametrelerinin sayısını temsil eden bir veya daha fazla basamaktan önce. |
| Köşeli Ayraçlar ([]) | Genel tür bağımsız değişken listesini, genel bir genel tür için içine alın; bir tür bağımsız değişken listesi içinde, derleme nitelikli bir türü içine alın. |
| Virgül (,) | Derleme adından önce. |
| Dönem (.) | Ad alanı tanımlayıcılarını belirtir. |
| Artı işareti (+) | İç içe geçmiş bir sınıftan önce. |
Örneğin, bir sınıfın tam adı şu şekilde görünebilir:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Ad alanı TopNamespace.Sub+Namespace ise, dizenin iç içe ayırıcı olarak yorumlanmasını önlemek için artı işaretinden (+) önce bir kaçış karakteri (\) olması gerekir. Yansıma bu dizeyi aşağıdaki gibi yayar:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
"++" "\+\+" olur ve "\" "\\" olur.
Bu nitelenmiş ad kalıcı hale gelebilir ve daha sonra yüklemek Typeiçin kullanılabilir. araması yapmak ve yüklemek Typeiçin yalnızca tür adıyla veya derleme türü adıyla kullanın GetType . GetType tür adıyla yalnızca çağıranın derlemesinde ve ardından Sistem derlemesinde öğesini arar Type . GetType derleme nitelikli tür adıyla, herhangi bir derlemede öğesini Type arar.
Tür adları, türün başvuru türü mü, işaretçi türü mü yoksa dizi türü mü olduğu gibi türle ilgili ek bilgileri belirten sondaki karakterleri içerebilir. Bu sonundaki karakterler olmadan tür adını almak için t.GetElementType().ToString()kullanın; burada t türdür.
Boşluklar, derleme adı dışındaki tüm tür adı bileşenlerinde geçerlidir. Derleme adında, ',' ayırıcıdan önceki boşluklar geçerlidir, ancak ',' ayırıcıdan sonraki boşluklar yoksayılır.
Genel bir türün adı, arka uç (') ve ardından genel tür bağımsız değişkenlerinin sayısını temsil eden basamaklarla biter. Bu ad düzenlemesinin amacı, derleyicilerin aynı ada sahip ancak aynı kapsamda farklı sayıda tür parametresi bulunan genel türleri desteklemesine izin vermektir. Örneğin yansıma, Visual Basic
Genel türler için tür bağımsız değişkeni listesi köşeli ayraç içine alınır ve tür bağımsız değişkenleri virgülle ayrılır. Örneğin, bir genel Dictionary<TKey,TValue> iki tür parametresine sahiptir.
Dictionary<TKey,TValue> Türü olan anahtarlardan biri MyTypeString aşağıdaki gibi gösterilebilir:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Tür bağımsız değişken listesinde derleme nitelikli bir tür belirtmek için, derleme nitelikli türünü köşeli ayraç içine alın. Aksi takdirde, derleme nitelikli adının bölümlerini ayıran virgüller ek tür bağımsız değişkenlerini sınırlandırma olarak yorumlanır. Örneğin, MyAssembly.dlltüründe anahtarlara Dictionary<TKey,TValue>sahip bir MyTypeString türü aşağıdaki gibi belirtilebilir:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Note
Derlemeye uygun bir tür, yalnızca tür parametre listesinde göründüğünde köşeli ayraç içine alınabilir. Tür parametre listelerindeki nitelenmiş ve nitelenmemiş türler için derlemeleri arama kuralları, nitelenmiş ve nitelenmemiş nongeneric türlerin kurallarıyla aynıdır.
Null atanabilir türler, genel türlerin özel bir örneğidir. Örneğin, null atanabilir Int32 değeri "System.Nullable'1[System.Int32]" dizesiyle gösterilir.
Note
Tür işleçlerini kullanarak null atanabilir türler de alabilirsiniz. Örneğin, null atanabilir Boolean türü C# dilinde typeof(Nullable<bool>) ve Visual Basic'da GetType(Nullable(Of Boolean)) tarafından döndürülür.
Aşağıdaki tabloda, çeşitli türler için kullandığınız GetType söz dizimi gösterilmektedir.
| Almak için | Kullan |
|---|---|
| Null atanabilir Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Yönetilmeyen işaretçi MyType |
Type.GetType("MyType*") |
İşaretçinin yönetilmeyen işaretçisi MyType |
Type.GetType("MyType**") |
Yönetilen işaretçi veya başvuru MyType |
Type.GetType("MyType&"). İşaretçilerden farklı olarak başvuruların bir düzeyle sınırlı olduğunu unutmayın. |
| Üst sınıf ve iç içe geçmiş sınıf | Type.GetType("MyParentClass+MyNestedClass") |
| Alt sınırı 0 olan tek boyutlu bir dizi | Type.GetType("MyArray[]") |
| Bilinmeyen alt sınıra sahip tek boyutlu bir dizi | Type.GetType("MyArray[*]") |
| N boyutlu bir dizi | Köşeli ayraçların içinde toplam n-1 kez virgül (,) olur. Örneğin, System.Object[,,] üç boyutlu Object bir diziyi temsil eder. |
| İki boyutlu bir dizinin dizisi | Type.GetType("MyArray[][]") |
| Bilinmeyen alt sınırları olan dikdörtgen bir iki boyutlu dizi | Type.GetType("MyArray[,]") |
| Tek tür bağımsız değişkeni olan genel bir tür | Type.GetType("MyGenericType`1[MyType]") |
| İki tür bağımsız değişkeni olan genel bir tür | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
| İki derlemeye uygun tür bağımsız değişkenine sahip genel bir tür | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
| Derleme nitelikli tür bağımsız değişkenine sahip derleme nitelikli genel tür | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
| Tür bağımsız değişkeni iki tür bağımsız değişkeni olan genel bir tür | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Ayrıca bkz.
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Tam Tür Adlarını Belirtme
Şunlara uygulanır
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
Türü belirtilen ada sahip alır ve isteğe bağlı olarak derlemeyi ve türü çözümlemek için özel yöntemler sağlar.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver);
public static Type GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> -> Type
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type)) As Type
Parametreler
- typeName
- String
Alınacak türün adı.
typeResolver Parametresi sağlanırsa, tür adı çözümlenebilen herhangi bir dize typeResolver olabilir.
assemblyResolver Parametre sağlanmışsa veya standart tür çözümlemesi kullanılıyorsa, typeName türün yürütülmekte olan derlemede veya mscorlib.dll/System.Private.CoreLib.dlliçinde olmadığı sürece, derlemenin nitelenmiş adı olmalıdır (bkzAssemblyQualifiedName. ), bu durumda ad alanına uygun tür adını sağlamak yeterlidir.
- assemblyResolver
- Func<AssemblyName,Assembly>
içinde typeNamebelirtilen derlemeyi bulup döndüren bir yöntem. Derleme adı nesnesi assemblyResolver olarak geçirilirAssemblyName. Bir derlemenin adını içermiyorsa typeName çağrılmaz assemblyResolver .
assemblyResolver Sağlanmazsa, standart derleme çözümlemesi gerçekleştirilir.
Dikkat: Bilinmeyen veya güvenilmeyen arayanların yöntemlerini geçirmeyin. Bunun yapılması kötü amaçlı kod için ayrıcalıkların yükseltilmesine neden olabilir. Yalnızca sağladığınız veya bildiğiniz yöntemleri kullanın.
tarafından veya standart derleme çözümlemesi tarafından typeName döndürülen assemblyResolver derlemeden tarafından belirtilen türü bulup döndüren bir yöntem. Herhangi bir derleme sağlanmazsa typeResolver , yöntemi bir tane sağlayabilir. yöntemi ayrıca büyük/küçük harfe duyarlı olmayan bir arama yapılıp yapılmayacağını belirten bir parametre alır; false bu parametreye geçirilir.
Dikkat: Bilinmeyen veya güvenilmeyen arayanların yöntemlerini geçirmeyin.
Döndürülenler
Belirtilen ada sahip tür veya null tür bulunamazsa.
- Öznitelikler
Özel durumlar
typeName, null'e eşittir.
Sınıf başlatıcısı çağrılır ve bir özel durum oluşturur.
Bir tür adına ve derleme adına ayrıştırıldığında typeName bir hata oluşur (örneğin, basit tür adı sıralanmamış bir özel karakter içerdiğinde).
-veya-
typeName, işaretçi türüne, türüne veya ByRef tür bağımsız değişkenlerinden biri olarak sahip olan genel bir Void türü temsil eder.
-veya-
typeName , yanlış sayıda tür bağımsız değişkeni olan genel bir türü temsil eder.
-veya-
typeName genel bir türü temsil eder ve tür bağımsız değişkenlerinden biri ilgili tür parametresinin kısıtlamalarını karşılamaz.
typeName geçersiz bir türü, örneğin bir dizisini TypedReferencetemsil eder.
Derleme veya bağımlılıklarından biri bulundu, ancak yüklenemedi.
-veya-
typeName geçersiz bir derleme adı içeriyor.
-veya-
typeName tür adı olmayan geçerli bir derleme adıdır.
Derleme veya bağımlılıklarından biri şu anda yüklü olan çalışma zamanı için geçerli değil.
Açıklamalar
Bu yöntem için kullanım senaryoları ve ve assemblyResolver parametreleriyle ilgili typeResolver ayrıntılar yöntem aşırı yüklemesinde GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) bulunabilir.
Note
Bulunamazsa typeName yöntemine yapılan GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) çağrı döndürür null. Özel durum oluşturmaz. Özel durumun oluşturup oluşturmadığını denetlemek için parametresi olan GetType yöntemin throwOnError aşırı yüklemesini çağırın.
Bu yöntem aşırı yüklemesini çağırmak, yöntem aşırı yüklemesini GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) çağırmak ve ve false parametreleri için belirtmekle throwOnErrorignoreCase aynıdır.
Şunlara uygulanır
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
Belirtilen ada sahip türü alır, tür bulunamazsa özel durum oluşturup oluşturmayacağını belirtir ve isteğe bağlı olarak derlemeyi ve türü çözümlemek için özel yöntemler sağlar.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError);
public static Type GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool -> Type
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean) As Type
Parametreler
- typeName
- String
Alınacak türün adı.
typeResolver Parametresi sağlanırsa, tür adı çözümlenebilen herhangi bir dize typeResolver olabilir.
assemblyResolver Parametre sağlanmışsa veya standart tür çözümlemesi kullanılıyorsa, typeName türün yürütülmekte olan derlemede veya mscorlib.dll/System.Private.CoreLib.dlliçinde olmadığı sürece, derlemenin nitelenmiş adı olmalıdır (bkzAssemblyQualifiedName. ), bu durumda ad alanına uygun tür adını sağlamak yeterlidir.
- assemblyResolver
- Func<AssemblyName,Assembly>
içinde typeNamebelirtilen derlemeyi bulup döndüren bir yöntem. Derleme adı nesnesi assemblyResolver olarak geçirilirAssemblyName. Bir derlemenin adını içermiyorsa typeName çağrılmaz assemblyResolver .
assemblyResolver Sağlanmazsa, standart derleme çözümlemesi gerçekleştirilir.
Dikkat: Bilinmeyen veya güvenilmeyen arayanların yöntemlerini geçirmeyin. Bunun yapılması kötü amaçlı kod için ayrıcalıkların yükseltilmesine neden olabilir. Yalnızca sağladığınız veya bildiğiniz yöntemleri kullanın.
tarafından veya standart derleme çözümlemesi tarafından typeName döndürülen assemblyResolver derlemeden tarafından belirtilen türü bulup döndüren bir yöntem. Herhangi bir derleme sağlanmazsa, yöntemi bir tane sağlayabilir. yöntemi ayrıca büyük/küçük harfe duyarlı olmayan bir arama yapılıp yapılmayacağını belirten bir parametre alır; false bu parametreye geçirilir.
Dikkat: Bilinmeyen veya güvenilmeyen arayanların yöntemlerini geçirmeyin.
- throwOnError
- Boolean
true türü bulunamazsa özel durum oluşturma; false öğesini döndürecek null. Belirtme, false diğer bazı özel durum koşullarını da gizler, ancak tümünü gizlemez. Özel Durumlar bölümüne bakın.
Döndürülenler
Belirtilen ada sahip tür. Tür bulunamazsa, throwOnError parametresi döndürülür veya null bir özel durum oluşturulur belirtir. Bazı durumlarda, değerinden throwOnErrorbağımsız olarak bir özel durum oluşturulur. Özel Durumlar bölümüne bakın.
- Öznitelikler
Özel durumlar
typeName, null'e eşittir.
Sınıf başlatıcısı çağrılır ve bir özel durum oluşturur.
throwOnError ve true türü bulunamadı.
-veya-
throwOnError
true ve typeName ekli sekme gibi geçersiz karakterler içeriyor.
-veya-
throwOnError ve truetypeName boş bir dizedir.
-veya-
throwOnError
true ve typeName geçersiz boyuta sahip bir dizi türünü temsil eder.
-veya-
typeName bir dizisini TypedReferencetemsil eder.
Bir tür adına ve derleme adına ayrıştırıldığında typeName bir hata oluşur (örneğin, basit tür adı sıralanmamış bir özel karakter içerdiğinde).
-veya-
throwOnError
true ve typeName geçersiz söz dizimi içeriyor (örneğin, "MyType[,*,]").
-veya-
typeName, işaretçi türüne, türüne veya ByRef tür bağımsız değişkenlerinden biri olarak sahip olan genel bir Void türü temsil eder.
-veya-
typeName , yanlış sayıda tür bağımsız değişkeni olan genel bir türü temsil eder.
-veya-
typeName genel bir türü temsil eder ve tür bağımsız değişkenlerinden biri ilgili tür parametresinin kısıtlamalarını karşılamaz.
throwOnError ve true derleme veya bağımlılıklarından biri bulunamadı.
-veya-
typeName geçersiz bir derleme adı içeriyor.
-veya-
typeName tür adı olmayan geçerli bir derleme adıdır.
Derleme veya bağımlılıklarından biri bulundu, ancak yüklenemedi.
Derleme veya bağımlılıklarından biri şu anda yüklü olan çalışma zamanı için geçerli değil.
Açıklamalar
Bu yöntem için kullanım senaryoları ve ve assemblyResolver parametreleriyle ilgili typeResolver ayrıntılar yöntem aşırı yüklemesinde GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) bulunabilir.
Bu yöntem aşırı yüklemesini çağırmak, yöntem aşırı yüklemesini GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) çağırmak ve parametresini belirtmekle falseignoreCase aynıdır.
Şunlara uygulanır
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
- Kaynak:
- Type.CoreCLR.cs
Belirtilen ada sahip türü alır, büyük/küçük harfe duyarlı bir arama yapılıp yapılmayacağını ve tür bulunamazsa özel durum oluşturup oluşturmayacağını belirtir ve isteğe bağlı olarak derlemeyi ve türü çözümlemek için özel yöntemler sağlar.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError, bool ignoreCase);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError, bool ignoreCase);
public static Type GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError, bool ignoreCase);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError, bool ignoreCase);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool * bool -> Type
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean, ignoreCase As Boolean) As Type
Parametreler
- typeName
- String
Alınacak türün adı.
typeResolver Parametresi sağlanırsa, tür adı çözümlenebilen herhangi bir dize typeResolver olabilir.
assemblyResolver Parametre sağlanmışsa veya standart tür çözümlemesi kullanılıyorsa, typeName türün yürütülmekte olan derlemede veya mscorlib.dll/System.Private.CoreLib.dlliçinde olmadığı sürece, derlemenin nitelenmiş adı olmalıdır (bkzAssemblyQualifiedName. ), bu durumda ad alanına uygun tür adını sağlamak yeterlidir.
- assemblyResolver
- Func<AssemblyName,Assembly>
içinde typeNamebelirtilen derlemeyi bulup döndüren bir yöntem. Derleme adı nesnesi assemblyResolver olarak geçirilirAssemblyName. Bir derlemenin adını içermiyorsa typeName çağrılmaz assemblyResolver .
assemblyResolver Sağlanmazsa, standart derleme çözümlemesi gerçekleştirilir.
Dikkat: Bilinmeyen veya güvenilmeyen arayanların yöntemlerini geçirmeyin. Bunun yapılması kötü amaçlı kod için ayrıcalıkların yükseltilmesine neden olabilir. Yalnızca sağladığınız veya bildiğiniz yöntemleri kullanın.
tarafından veya standart derleme çözümlemesi tarafından typeName döndürülen assemblyResolver derlemeden tarafından belirtilen türü bulup döndüren bir yöntem. Herhangi bir derleme sağlanmazsa, yöntemi bir tane sağlayabilir. yöntemi ayrıca büyük/küçük harfe duyarlı olmayan bir arama yapılıp yapılmayacağını belirten bir parametre alır; değeri ignoreCase bu parametreye geçirilir.
Dikkat: Bilinmeyen veya güvenilmeyen arayanların yöntemlerini geçirmeyin.
- throwOnError
- Boolean
true türü bulunamazsa özel durum oluşturma; false öğesini döndürecek null. Belirtme, false diğer bazı özel durum koşullarını da gizler, ancak tümünü gizlemez. Özel Durumlar bölümüne bakın.
- ignoreCase
- Boolean
trueiçin büyük/küçük harfe duyarlı olmayan bir arama yapmak üzere typeNamefalse için büyük/küçük harfe duyarlı bir arama yapmak içintypeName.
Döndürülenler
Belirtilen ada sahip tür. Tür bulunamazsa, throwOnError parametresi döndürülür veya null bir özel durum oluşturulur belirtir. Bazı durumlarda, değerinden throwOnErrorbağımsız olarak bir özel durum oluşturulur. Özel Durumlar bölümüne bakın.
- Öznitelikler
Özel durumlar
typeName, null'e eşittir.
Sınıf başlatıcısı çağrılır ve bir özel durum oluşturur.
throwOnError ve true türü bulunamadı.
-veya-
throwOnError
true ve typeName ekli sekme gibi geçersiz karakterler içeriyor.
-veya-
throwOnError ve truetypeName boş bir dizedir.
-veya-
throwOnError
true ve typeName geçersiz boyuta sahip bir dizi türünü temsil eder.
-veya-
typeName bir dizisini TypedReferencetemsil eder.
Bir tür adına ve derleme adına ayrıştırıldığında typeName bir hata oluşur (örneğin, basit tür adı sıralanmamış bir özel karakter içerdiğinde).
-veya-
throwOnError
true ve typeName geçersiz söz dizimi içeriyor (örneğin, "MyType[,*,]").
-veya-
typeName, işaretçi türüne, türüne veya ByRef tür bağımsız değişkenlerinden biri olarak sahip olan genel bir Void türü temsil eder.
-veya-
typeName , yanlış sayıda tür bağımsız değişkeni olan genel bir türü temsil eder.
-veya-
typeName genel bir türü temsil eder ve tür bağımsız değişkenlerinden biri ilgili tür parametresinin kısıtlamalarını karşılamaz.
throwOnError ve true derleme veya bağımlılıklarından biri bulunamadı.
Derleme veya bağımlılıklarından biri bulundu, ancak yüklenemedi.
-veya-
typeName geçersiz bir derleme adı içeriyor.
-veya-
typeName tür adı olmayan geçerli bir derleme adıdır.
Derleme veya bağımlılıklarından biri, şu anda yüklü olan çalışma zamanı için geçerli bir derleme değil.
Açıklamalar
.NET Core 3.0 ve sonraki sürümlerde assemblyResolver null ise, bu API tarafından tetiklenen derleme yükleri geçerli AssemblyLoadContext.CurrentContextualReflectionContext değerinden etkilenir.
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) metodunun varsayılan uygulamasını daha esnek uygulamalarla değiştirmek için metot aşırı yüklemesi GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) ve onun ilişkili aşırı yüklemelerini (GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean) ve GetType) kullanın. Tür adlarını ve bunları içeren derlemelerin adlarını çözümleyen kendi yöntemlerinizi sağlayarak aşağıdakileri yapabilirsiniz:
- Bir türün hangi derleme sürümünden yüklendiğini denetleyin.
- Derleme adı içermeyen bir tür adı aramak için başka bir yer sağlayın.
- Kısmi derleme adlarını kullanarak derlemeleri yükleyin.
- Ortak dil çalışma zamanı (CLR) tarafından oluşturulmayan System.Type alt sınıflarını döndürün.
Örneğin, sürüme dayanıklı serileştirmede bu yöntem kısmi bir ad kullanarak "en uygun" derlemeyi aramanızı sağlar. Yöntemin GetType diğer aşırı yüklemeleri, sürüm numarasını içeren bir derleme nitelikli tür adı gerektirir.
Tür sisteminin alternatif uygulamaları, CLR tarafından oluşturulmayan System.Type alt sınıflarını döndürmek zorunda kalabilir; yöntemin farklı aşırı yüklemeleri tarafından döndürülen tüm türler çalışma zamanı türleridir.
Kullanım notları
Bu yöntem aşırı yüklemesi ve ilişkili aşırı yüklemeleri, typeName ifadesini bir türün adı ve bir derlemenin adı olarak ayrıştırır ve ardından adları çözümler. Derleme adının çözümü, tür adının çözümlenmesinden önce gerçekleşir çünkü bir tür adı derleme bağlamında çözümlenmelidir.
Note
Derleme nitelikli tür adları kavramını bilmiyorsanız AssemblyQualifiedName özelliğine bakın.
Derlemeye uygun bir ad değilse typeName , derleme çözümlemesi atlanır. Vasıflandırılmamış tür adları mscorlib.dll/System.Private.CoreLib.dll veya şu anda yürütülen çalışma derlemesi bağlamında çözümlenebilir. Ayrıca isteğe bağlı olarak typeResolver parametresinde bir derleme sağlayabilirsiniz. Farklı ad çözümlemesi türleri için derleme adını ekleme veya çıkarmanın etkileri , Karma ad çözümlemesi bölümünde tablo olarak görüntülenir.
Genel kullanım notları:
Bilinmeyen veya güvenilmeyen arayanlardan gelen yöntemleri
assemblyResolverveyatypeResolveriletmeyin. Yalnızca sağladığınız veya bildiğiniz yöntemleri kullanın.Caution
Bilinmeyen veya güvenilmeyen arayanların yöntemlerinin kullanılması kötü amaçlı kod için ayrıcalıkların yükseltilmesine neden olabilir.
ve/veya
assemblyResolverparametrelerini atlarsanıztypeResolver, parametreninthrowOnErrordeğeri varsayılan çözünürlüğü gerçekleştiren yöntemlere geçirilir.Eğer
throwOnErrortrueise, bu yöntem TypeLoadExceptiontypeResolverdöndüğünde birnull, ve FileNotFoundExceptionassemblyResolverdöndüğünde birnulloluşturur.Bu yöntem
assemblyResolvervetypeResolvertarafından oluşturulan özel durumları yakalamaz. Çözümleyici metodların fırlattığı istisnalardan siz sorumlusunuz.
Derlemeleri çözme
assemblyResolver yöntemi, AssemblyName içinde bulunan dize derleme adını ayrıştırarak üretilen bir typeName nesnesi alır.
typeName bir derleme adı içermiyorsa, assemblyResolver çağrılmaz ve null, typeResolver öğesine aktarılır.
assemblyResolver Sağlanmazsa, derlemeyi bulmak için standart derleme araması kullanılır. Sağlanırsa assemblyResolver, GetType yöntem standart yoklama yapmaz; bu durumda, yönteminizin kendisine geçirdiğiniz tüm derlemeleri işleyebilmesini sağladığınızdan assemblyResolver emin olmanız gerekir.
Derleme çözümlenemiyorsa assemblyResolver yöntemi null döndürmelidir. Eğer assemblyResolvernull döndürürse, typeResolver çağrılmaz ve başka işlem gerçekleşmez; ayrıca, eğer throwOnErrortrue ise, bir FileNotFoundException atılır.
AssemblyName olarak geçirilen assemblyResolver kısmi bir ad ise, bölümlerinin biri veya daha fazlası null olabilir. Örneğin, bir sürümü yoksa, Version özelliği null olur.
Version özelliği, CultureInfo özelliği ve GetPublicKeyToken yönteminin tümü null döndürürse, yalnızca derlemenin basit adı sağlanır.
assemblyResolver yöntemi derlem adının tüm kısımlarını kullanabilir veya göz ardı edebilir.
Farklı derleme çözümleme seçeneklerinin etkileri, basit ve derlemeye uygun tür adları için Karma ad çözümlemesi bölümünde bir tablo olarak görüntülenir.
Türleri çözmek
Derleme adı belirtilmezse typeName , typeResolver her zaman çağrılır. Bir derleme adı belirtirse typeName , typeResolver yalnızca derleme adı başarıyla çözümlendiğinde çağrılır. Eğer assemblyResolver veya standart derleme yoklama işlevi null döndürürse, typeResolver çağrılmaz.
typeResolver yöntemi üç bağımsız değişken alır:
- Aranacak derleme veya
nullderleme adı içermiyorsatypeName. - Türün basit adı. İç içe yerleştirilmiş bir tür söz konusu olduğunda, bu en dıştaki içeren türdür. Genel bir tür söz konusu olduğunda, bu genel türün basit adıdır.
- Tür adlarının büyük/küçük harf durumunun göz ardı edilip edilmeyeceğini belirten bir Boole değeri.
Uygulama, bu bağımsız değişkenlerin nasıl kullanıldığını belirler.
typeResolver yöntemi, türü çözümleyemediğinde null döndürmelidir. Eğer typeResolvernull döndürürse ve throwOnErrortrue ise, bu aşırı yüklemesi GetType bir TypeLoadException oluşturur.
Farklı tür çözümleme seçeneklerinin etkileri, basit ve derlemeye uygun tür adları için Karma ad çözümlemesi bölümünde tablo olarak görüntülenir.
İç içe türleri çözmek
İç içe geçmiş bir türse, yalnızca en dıştaki içeren türün adı typeName'e geçirilir.
typeResolver bu türü döndürdüğünde, GetNestedType yöntemi, en içteki iç içe yerleştirilmiş tür çözümlenene kadar özyinelemeli olarak çağrılır.
Genel türleri çözümleme
GetType, genel türleri çözümlemek için özyinelemeli olarak çağrılır: Önce genel türün kendisini çözümlemek ve sonra da tür bağımsız değişkenlerini çözümlemek için. Tür bağımsız değişkeni genelse, GetType tür bağımsız değişkenlerini çözümlemek için özyinelemeli olarak çağrılır, vb.
assemblyResolver ve typeResolver birleşimi, sağladığınız bu özyinelemenin tüm düzeylerini çözümleyebilecek durumda olmalıdır. Örneğin, yüklemesini assemblyResolverdenetleen bir MyAssembly sağladığınızı varsayalım. Genel türü Dictionary<string, MyType> (Dictionary(Of String, MyType) Visual Basic'te) çözümlemek istediğinizi varsayalım. Aşağıdaki genel tür adını geçirebilirsiniz:
"System.Collections.Generic.Dictionary`2[System.String,[MyNamespace.MyType, MyAssembly]]"
MyType tek derleme nitelikli tür bağımsız değişkeni olduğuna dikkat edin.
Dictionary<TKey,TValue> ve String sınıflarının adları derlemeye uygun olarak nitelendirilmemiştir.
typeResolver'unuzun hem bir derlemeyi hem de null işleyebilmesi gerekir, çünkü null ve Dictionary<TKey,TValue> için String alacaktır. Nitelenmemiş tür adlarının GetType her ikisi de mscorlib.dll/System.Private.CoreLib.dlliçinde olduğundan, dize alan yöntemin aşırı yüklemesini çağırarak bu durumu işleyebilir:
Type t = Type.GetType(test,
(aName) => aName.Name == "MyAssembly" ?
Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") : null,
(assem, name, ignore) => assem == null ?
Type.GetType(name, false, ignore) :
assem.GetType(name, false, ignore)
);
let t =
Type.GetType(test,
(fun aName ->
if aName.Name = "MyAssembly" then
Assembly.LoadFrom @".\MyPath\v5.0\MyAssembly.dll"
else null),
fun assem name ignr ->
if assem = null then
Type.GetType(name, false, ignr)
else
assem.GetType(name, false, ignr))
Bu tür adları derleme nitelikli olmadığından, assemblyResolver yöntemi sözlük türü ve dize türü için çağrılmaz.
Şimdi, System.String yerine, ilk genel bağımsız değişken türünün YourType'den YourAssembly olduğunu varsayalım:
"System.Collections.Generic.Dictionary`2[[YourNamespace.YourType, YourAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null], [MyNamespace.MyType, MyAssembly]]"
Bu bütünleşim ne mscorlib.dll/System.Private.CoreLib.dll ne de şu anda yürütülen bütünleşim olmadığından, bütünleşim nitelenmiş bir ad olmadan YourType çözümlenemez. Çünkü assemblyResolve'iniz özyinelemeli olarak çağrılacağından, bu durumu yönetebilmelidir. diğer null derlemeleri için MyAssembly döndürmek yerine, artık sağlanan AssemblyName nesneyi kullanarak bir derleme yükü gerçekleştiriyor.
Type t2 = Type.GetType(test,
(aName) => aName.Name == "MyAssembly" ?
Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") :
Assembly.Load(aName),
(assem, name, ignore) => assem == null ?
Type.GetType(name, false, ignore) :
assem.GetType(name, false, ignore), true
);
let t2 =
Type.GetType(test,
(fun aName ->
if aName.Name = "MyAssembly" then
Assembly.LoadFrom @".\MyPath\v5.0\MyAssembly.dll"
else Assembly.Load aName),
(fun assem name ignr ->
if assem = null then
Type.GetType(name, false, ignr)
else
assem.GetType(name, false, ignr)), true)
Özel karakterler içeren tür adlarını çözümleme
Bazı karakterlerin derleme nitelikli isimlerde özel anlamları vardır. Basit bir tür adı bu karakterleri içeriyorsa, bu karakterler, o basit adın derleme nitelikli bir adın parçası olduğunda ayrıştırma hatalarına neden olur. Ayrıştırma hatalarından kaçınmak için, derlemenin nitelenmiş adını yönteme geçirebilmek için önce ters eğik çizgiyle özel karakterlerden GetType kaçınmanız gerekir. Örneğin, bir tür Strange]Type olarak adlandırıldıysa, kaçış karakteri köşeli ayraçların önüne aşağıdaki gibi eklenmelidir: Strange\]Type.
Note
Bu tür özel karakterlere sahip adlar Visual Basic veya C# dilinde oluşturulamaz, ancak ortak ara dil (CIL) kullanılarak veya dinamik derlemeler yayılarak oluşturulabilir.
Aşağıdaki tabloda, tür adları için özel karakterler gösterilmektedir.
| Karakter | Anlamı |
|---|---|
, (virgül) |
Derlemeye uygun adlar için sınırlayıcı. |
[] (köşeli ayraçlar) |
Son ek çifti olarak bir dizi türünü belirtir; bir sınırlayıcı çifti olarak ise genel argüman listelerini ve derleme nitelenmiş adlarını içine alır. |
& (ve işareti) |
Ek olarak, bir türün bir referans türü olduğunu gösterir. |
* (yıldız) |
Sonek olarak, bir türün işaretçi türü olduğunu gösterir. |
+ (artı) |
İç içe türler için sınırlayıcı. |
\ (ters eğik çizgi) |
Kaçış karakteri. |
Doğru kaçış dizeleri döndürme gibi AssemblyQualifiedName özellikler. Yönteme kaçış dizelerini doğru şekilde GetType geçirmeniz gerekir. Buna karşılık, GetType yöntem doğru kaçış adlarını typeResolver varsayılan tür çözümleme yöntemlerine geçirir.
typeResolver öğesinde bir adı kaçış karakteri kullanılmamış bir adla karşılaştırmanız gerekiyorsa, kaçış karakterlerini kaldırmanız gerekir.
Karma ad çözümlemesi
Aşağıdaki tablo, assemblyResolver içindeki tüm tür adı ve derleme adı birleşimleri için, typeResolver, typeName ve varsayılan ad çözümlemesi arasındaki etkileşimleri özetlemektedir.
| Tür adının içeriği | Derleme çözümleyici yöntemi | Tür çözümleyici yöntemi | Result |
|---|---|---|---|
| tür, derleme | sıfır | sıfır | Type.GetType(String, Boolean, Boolean) yöntem aşırı yüklemesinin çağrılmasına eşdeğerdir. |
| tür, derleme | Sağlanan | sıfır |
assemblyResolver derlemeyi döndürür veya derlemeyi çözümleyemezse null döndürür. Derleme çözümlenirse, Assembly.GetType(String, Boolean, Boolean) derlemeden türü yüklemek için metot aşırı yüklemesi kullanılır; aksi takdirde türü çözme girişiminde bulunulmaz. |
| tür, derleme | sıfır | Sağlanan | Bir derleme adının bir AssemblyName nesneye dönüştürülmesi ve derlemeyi almak için Assembly.Load(AssemblyName) metot aşırı yüklemesinin çağrılmasıyla eşdeğerdir. Bütünleştirme çözümlenirse typeResolver iletilir; aksi takdirde typeResolver çağrılmaz ve türü çözümlemek için başka bir girişimde bulunulmaz. |
| tür, derleme | Sağlanan | Sağlanan |
assemblyResolver derlemeyi döndürür veya derlemeyi çözümleyemezse null döndürür. Bütünleştirme çözümlenirse typeResolver iletilir; aksi takdirde typeResolver çağrılmaz ve türü çözümlemek için başka bir girişimde bulunulmaz. |
| type | null, sağlandı | sıfır |
Type.GetType(String, Boolean, Boolean) yöntem aşırı yüklemesinin çağrılmasına eşdeğerdir. Derleme adı sağlanmadığından, yalnızca mscorlib.dll/System.Private.CoreLib.dll ve şu anda yürütülen derlemede arama yapılır.
assemblyResolver sağlanmışsa, yoksayılır. |
| type | null, sağlandı | Sağlanan |
typeResolver çağrılır ve null derleme için geçirilir.
typeResolver herhangi bir derlemeden, amacı doğrultusunda yüklediği derlemeler de dahil olmak üzere, bir tür sağlayabilir.
assemblyResolver sağlanmışsa, yoksayılır. |
| toplantı | null, sağlandı | null, sağlandı | Derleme adı, derleme nitelikli tür adıymış gibi ayrıştırıldığından bir FileLoadException atılır. Bu, geçersiz bir derleme adıyla sonuç edilir. |