public class A
{
public A() { }
public A(int _i, byte _b) { }
private void Carp(int _i, byte _b) { }
public int Topla(int _i, byte _b)
{
return _i + _b;
}
}
using System;
using System.Linq;
using System.Reflection;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
Assembly asm = Assembly.LoadFrom(@"C:\Users\cem\Documents\visual studio 2010\Projects\ConsoleApplication5\LibOrnek\bin\Debug\LibOrnek.dll");
Type[] asmTipleri = asm.GetTypes();
#region Assembly içindeki sınıf içinden yapıcı metotların imzasını çekme
// ornekAssembly.exe içinde bir çok sınıf olduğunu düşünelim
foreach (Type sinif in asmTipleri)
{
Console.Write(sinif.IsClass ? "class " : "abstract class ");
Console.WriteLine(sinif.Name + " {");
// Bu sınıfın yapıcı metotlarını çekelim
foreach (ConstructorInfo ctor in sinif.GetConstructors())
{
Console.Write("\t" + sinif.Name + "(");
// Yapıcı da olsa metot metottur ve parametreleri var mı diye bakalım.
foreach (ParameterInfo param in ctor.GetParameters())
{
// SinifAdi(string _paramAdi1, int _paramAdi2)
Console.Write(param.ParameterType.Name + " " + param.Name + ",");
}
Console.WriteLine(") { }");
}
// DeclaredOnly : Yalnızca sınıf içinde tanımlı olan metotlar. Kalıtımla gelenler hariç,
// Instance : Nesnelerin metotları,
// NonPublic : Public olmayan metotları,
// Public : Public metotları,
// Static : Static metotları ÇEKECEK.
MethodInfo[] metotlar = sinif.GetMethods(BindingFlags.DeclaredOnly
| BindingFlags.Instance
| BindingFlags.NonPublic
| BindingFlags.Public
| BindingFlags.Static);
foreach (MethodInfo metod in metotlar)
{
Console.Write("\t" + (metod.IsPrivate ? "private " : metod.IsPublic ? "public " : "") + metod.ReturnType.Name + " " + metod.Name + "(");
foreach (ParameterInfo param in metod.GetParameters())
{
// DönüşTipiAdı MetotAdı (ParamTipi paramAdi, ParamTipi paramAdi2) { }
Console.Write(param.ParameterType.Name + " " + param.Name + ", ");
}
Console.WriteLine(") { } ");
}
Console.WriteLine("}");
}
#endregion
/*
* Buraya kadarki çıktı:
class A {
A() { }
A(Int32 _i,Byte _b,) { }
private Void Carp(Int32 _i, Byte _b, ) { }
public Int32 Topla(Int32 _i, Byte _b, ) { }
}
*/
// Metot çağırmak:
object[] _params = new object[2];
_params[0] = 15;
_params[1] = (byte)20;
Type tip = asm.GetType("A");
MethodInfo miTopla = tip.GetMethod("Topla");
object objSinifOrnegi = tip.GetConstructors()[0].Invoke(null);
object sonuc = miTopla.Invoke(objSinifOrnegi, _params);
Console.WriteLine("\n\t Toplama Sonucu: " + sonuc);
/*
* Çıktımız:
class A {
A() { }
A(Int32 _i,Byte _b,) { }
private Void Carp(Int32 _i, Byte _b, ) { }
public Int32 Topla(Int32 _i, Byte _b, ) { }
}
Toplama Sonucu: 35
*/
Console.ReadLine();
}
}
}
Activator ile obje yaratmak:
object obj = Activator.CreateInstance("deneme, Version=0.0.0.0, Culture=neutral, PublicKeyToken=dc5cbb4d7c01cc5e", "Service1").Unwrap();
Type tip = obj.GetType();
MethodInfo miTopla = tip.GetMethod("HelloWorld");