.NET'te Düşünceler
ad alanında System.Reflection bulunan sınıflar ile System.Typebirlikte, yüklenen derlemeler ve sınıflar, arabirimler ve değer türleri (yapılar ve numaralandırmalar) gibi bunların içinde tanımlanan türler hakkında bilgi edinmenizi sağlar. Ayrıca, çalışma zamanında tür örnekleri oluşturmak ve bunları çağırmak ve bunlara erişmek için yansımayı kullanabilirsiniz.
Derlemeler modüller, modüller türleri ve türler üyeleri içerir. Düşünceler ion derlemeleri, modülleri ve türleri kapsülleyen nesneler sağlar. Bir türün örneğini dinamik olarak oluşturmak, türü var olan bir nesneye bağlamak veya var olan bir nesneden türü almak için yansımayı kullanabilirsiniz. Daha sonra türün yöntemlerini çağırabilir veya alanlarına ve özelliklerine erişebilirsiniz. Yansımanın tipik kullanımları şunlardır:
- Derlemeleri tanımlamak ve yüklemek, derleme bildiriminde listelenen modülleri yüklemek ve bu derlemeden bir tür bulup bunun bir örneğini oluşturmak için kullanın Assembly .
- Modülü içeren derleme ve modüldeki sınıflar gibi bilgileri bulmak için kullanın Module . Ayrıca modülde tanımlanan tüm genel yöntemleri veya belirli, genel olmayan diğer yöntemleri de alabilirsiniz.
- Bir oluşturucunun adı, parametreleri, erişim değiştiricileri (veya
private
gibipublic
) ve uygulama ayrıntıları (veya gibi) gibi bilgileri bulmak içinabstract
virtual
kullanınConstructorInfo. Belirli bir Type oluşturucuyu GetConstructors çağırmak için veya GetConstructor yöntemini kullanın. - Bir yöntemin adı, dönüş türü, parametreleri, erişim değiştiricileri ve uygulama ayrıntıları (veya
virtual
gibiabstract
) gibi bilgileri bulmak için kullanınMethodInfo. GetMethods Belirli bir Type yöntemi çağırmak için veya GetMethod yöntemini kullanın. - Bir alanın adı, erişim değiştiricileri ve uygulama ayrıntıları (örneğin
static
) gibi bilgileri bulmak ve alan değerlerini almak veya ayarlamak için kullanınFieldInfo. - Ad, olay işleyicisi veri türü, özel öznitelikler, bildirim türü ve bir olayın yansıtılan türü gibi bilgileri bulmak ve olay işleyicileri eklemek veya kaldırmak için kullanın EventInfo .
- Bir özelliğin adı, veri türü, bildirim türü, yansıtılmış türü ve salt okunur veya yazılabilir durumu gibi bilgileri bulmak ve özellik değerlerini almak veya ayarlamak için kullanın PropertyInfo .
- Parametrenin adı, veri türü, parametrenin giriş veya çıkış parametresi olup olmadığı ve parametrenin yöntem imzasında konumu gibi bilgileri bulmak için kullanın ParameterInfo .
- veya yalnızca yansıma bağlamında (.NET Framework) çalışırken MetadataLoadContext özel öznitelikler hakkındaki bilgileri bulmak için kullanınCustomAttributeData. CustomAttributeData , öznitelikleri örnekleri oluşturmadan incelemenize olanak tanır.
Ad alanının sınıfları System.Reflection.Emit , çalışma zamanında türler oluşturmanıza olanak tanıyan özel bir yansıma biçimi sağlar.
Düşünceler, kullanıcıların türleri seçmesine ve sonra bu türlerle ilgili bilgileri görüntülemesine olanak tanıyan tür tarayıcıları oluşturmak için de kullanılabilir.
Yansıma için başka kullanımlar da vardır. JScript gibi diller için derleyiciler, sembol tabloları oluşturmak için yansıma kullanır. Ad alanındaki System.Runtime.Serialization sınıflar, verilere erişmek ve kalıcı olacak alanları belirlemek için yansıma kullanır. Ad alanında System.Runtime.Remoting sınıflar serileştirme yoluyla dolaylı olarak yansıma kullanır.
Yansımadaki çalışma zamanı türleri
Düşünceler ion türleri, üyeleri, parametreleri ve diğer kod varlıklarını temsil eden ve MethodInfogibi Type sınıflar sağlar. Ancak, yansıma kullandığınızda, çoğu soyut (MustInherit
Visual Basic'te) olan bu sınıflarla doğrudan çalışmazsınız. Bunun yerine, ortak dil çalışma zamanı (CLR) tarafından sağlanan türlerle çalışırsınız.
Örneğin, bir Type nesneyi almak için C# typeof
işlecini (GetType
Visual Basic'te) kullandığınızda, nesne gerçekten bir RuntimeType
olur. RuntimeType
türetilir Type ve tüm soyut yöntemlerin uygulamalarını sağlar.
Bu çalışma zamanı sınıfları ( internal
Friend
Visual Basic'te). Davranışları temel sınıf belgeleri tarafından açıklandığından, temel sınıflarından ayrı olarak belgelenmez.