“Reflection” kullanırken “ref” parametreler kullanmak

Önceki bloğumda yazdığım bir yazıyı gelen sorular üzerine buraya da yazdım. Daha önceden okumuş arkadaşlara verdiğim rahatsızlıktan ötürü özür dilerim.. :)

Bugün bir arkadaşımdan email aldım, kendisi “reflection” kullanırken nasıl parametrelerden birini veya birkaçını “ref” olarak nasıl geçebileceÄŸini soruyordu. Ä°nternet üzerinden araÅŸtırdığı söyledi fakat bulamamış, kendisine emaille yardımcı oldum.

Zamanım da var enerjim de bir yazı da buraya yazayım dedim.. iyi demiş miyim ? :)

Elimizde Deneme2 adlı bir namespace mevcut olsun, hatta bu ayrı bir proje olsun; (hedef namespace)
[csharp]
namespace Deneme2
{
public class Aha
{
public Aha(int a)
{
Console.WriteLine(“Aha.Const = ” + a.ToString());
}
public void ToString(ref int sayi)
{
Console.WriteLine(“Aha.ToString” + sayi.ToString());
sayi = 10;
}
}
}
[/csharp]

Ve Deneme2 Assembly’sine eriÅŸerek “Aha” sınıfını ‘reflection’ ile yaratıp ref veya normal parametreler geçerek method’larını çağıran TestApp1 namespace’inde Program adlı bir sınıfımız olsun…
[csharp]
namespace TestApp1
{
class Program
{
static void Main(string[] args)
{
// Deneme2 ayrı bir proje olduÄŸu için ÅŸu anki Assembly’de yer almaz bu nedenle
// çağrılmalıdır.
Assembly myAssembly = Assembly.Load(“Deneme2”);

// myAssembly içerisinden Aha adlı sınıfın tipi alınıyor.
Type myType = myAssembly.GetType(“Deneme2.Aha”, true, true);

// Yapıcı ve methodlar için parametre listesi düzeneği hazırlanıyor.
Type[] paramTypes = new Type[1];
paramTypes[0] = typeof(int);

// Yukarıda hazırlanan parametre listesinin değerleri hazırlanıyor.
Object[] paramValues = new Object[1];
paramValues[0] = (object)5;

// Daha önceden tipi hazırlanmış olan sınıfın yapıcısını parametre
// listesi ve değerleri ile çağırıyoruz.
ConstructorInfo myInfo = myType.GetConstructor(paramTypes);
Object myAhaObject = myInfo.Invoke(paramValues);

// Yeni oluÅŸturduÄŸumuz myAhaObject üzerinde “ToString” method’u ‘invoke’ ediliyor.
myType.InvokeMember(“ToString”, BindingFlags.InvokeMethod, null, myAhaObject, paramValues);

Console.WriteLine((int)paramValues[0]);
Console.ReadLine();
}
}
}
[/csharp]
Kolay gelsin, tekrar görüşmek üzere..!

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir