Konuyu görüntüle
IUCODERS FORUM > Duyurular > Okul ile ilgili > Visual studio non public members
Yazar
pinar23


avatar

Kayıt: 29.02.2008
22.05.2008-15:08 #44837
Merhaba arkadaşlar,
Acaba Visual studiu da Herhangi bir class (ComplexImage) non public members ulaşma şansımız varmı???





Yazar
aliolci


avatar
en dipten taa derind
Kayıt: 19.01.2006
22.05.2008-15:45 #44840
private int degisken;
public int degiskenProperty{get{return degisken;}set{degisken=value;}}

seklinde property tanımlayarak private degiskene ulaşabilirsin.






Cant you see the writing on the wall?
"die young gonna die young"
So! Live for today
Tomorrow never comes..

Yazar
timur


avatar
İstanbul
Kayıt: 19.01.2006
22.05.2008-16:02 #44841
Non public member lara reflection ile erişebiliyoruz. Type bilgilerini aldıktan sonra o type bilgisi ile Activator.CreateInstance diyerek bir adet instance ını yaratıp, yine type bilgilerinden o member ı alabiliriz. Örneğin şöyle bir class ımız olsun.

class Mathematics
{
private int Add(int value1, int value2)
{
return value1 + value2;
}
}


Buradaki Add methodunu reflection ile alıp, MethodInfo içindeki Invoke methodu ile çağırabiliriz...

Type t = typeof(Mathematics);
Mathematics m = Activator.CreateInstance(t) as Mathematics;
MethodInfo info = t.GetMethod("Add", BindingFlags.NonPublic|BindingFlags.Instance);
int value = (int)info.Invoke(m, new object[] { 1, 2 });
MessageBox.Show(value.ToString());

Burada GetMethod derken BindingFlag olarak NonPublic olduğunu ve bir instance ile çağrıldığını belirttik. Bu yolla istediğimiz tipteki her member ı alabiliriz.

GetMethod
GetMember
GetProperty
GetField

gibi methodları kullanarak.

İyi çalışmalar...





Hayat varsa umut vard?r...
www.timureroglu.com

Yazar
pinar23


avatar

Kayıt: 29.02.2008
22.05.2008-16:19 #44842
merhaba Timur,

Ben MethodInfo sınıfını tanıtamadım bir reference llibrary varmı??





Yazar
pinar23


avatar

Kayıt: 29.02.2008
22.05.2008-16:25 #44843
tammam buldum timur reflection altındaymış





Yazar
neurorebel


avatar

Kayıt: 15.08.2007
22.05.2008-16:27 #44844
neden non-public üyelere ulaşmak istiyorsunuz ?





Do weird and difficult things.

Yazar
pinar23


avatar

Kayıt: 29.02.2008
22.05.2008-16:37 #44845
şimdi asılında benim AForge.Math kütüphanesin içinde
ComplexImage diye bir sınıfım var ve bunun non public members içinde data kısmı var bir matris bu içinde frekans değereler yani complex sayılar var. ben bu değerleri herhangi bir dizinin içine atmak istiyorum. Umarın nedeni açıklayabildim. :)






Yazar
pinar23


avatar

Kayıt: 29.02.2008
22.05.2008-16:50 #44846
ComplexImage cImage = ComplexImage.FromBitmap(image);
cImage = Activator.CreateInstance(t) as ComplexImage;

System.Reflection.MethodInfo info = t.GetMethod("ComplexImage", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
Complex[,] data1 = info.Invoke(cImage,???)

yani soru kısmını anlayamadım. Oraya yine cImage içinde bulanan yani non public memeber gelemdi???






Yazar
timur


avatar
İstanbul
Kayıt: 19.01.2006
22.05.2008-16:51 #44847
pinar23 yazdi
 
şimdi asılında benim AForge.Math kütüphanesin içinde
ComplexImage diye bir sınıfım var ve bunun non public members içinde data kısmı var bir matris bu içinde frekans değereler yani complex sayılar var. ben bu değerleri herhangi bir dizinin içine atmak istiyorum. Umarın nedeni açıklayabildim. :)


Bayağı hayırlı bir iş içinmiş laughing

Kusura bakma görmedim sorduğun soruyu, System.Reflection namespace i içinde. Gerçi bulmuşsun ama yine de cevap vereyim dedim biggrin

Kolay gelsin...





Hayat varsa umut vard?r...
www.timureroglu.com

Yazar
timur


avatar
İstanbul
Kayıt: 19.01.2006
22.05.2008-16:53 #44848
pinar23 yazdi
 
ComplexImage cImage = ComplexImage.FromBitmap(image);
cImage = Activator.CreateInstance(t) as ComplexImage;

System.Reflection.MethodInfo info = t.GetMethod("ComplexImage", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
Complex[,] data1 = info.Invoke(cImage,???)

yani soru kısmını anlayamadım. Oraya yine cImage içinde bulanan yani non public memeber gelemdi???


Complex[,] data1 = info.Invoke(cImage,???)

soru işareti kısmında senin çağırdığın ComplexImage metodunun parametreleri gelecek. Parametreleri de object türünden dizi şeklinde gönderiyorsun...





Hayat varsa umut vard?r...
www.timureroglu.com

Yazar
timur


avatar
İstanbul
Kayıt: 19.01.2006
22.05.2008-17:12 #44850
Yalnız data kısmı field olduğu için GetField ile almanız gerekiyor. Nesnenin instance ını yaratabildiğiniz için de Activator.CreateInstance ile yaratamanıza gerek yok. Sanırım istediğiniz şöyle birşey...

Bitmap bmp = Bitmap.FromFile(@"C:Users\timure\Desktop\access.bmp") as Bitmap;

ComplexImage image = ComplexImage.FromBitmap(bmp);
Type t = image.GetType();
FieldInfo info = t.GetField("data", BindingFlags.Instance | BindingFlags.NonPublic);
Complex[,] data = info.GetValue(image) as Complex[,];

İyi çalışmalar...





Hayat varsa umut vard?r...
www.timureroglu.com

Yazar
pinar23


avatar

Kayıt: 29.02.2008
22.05.2008-17:28 #44851
Evet Timur dediğin gibi GetField oldu çok teşekkür ederim.
Sende image processing falan ilgiliyormusun???





Yazar
timur


avatar
İstanbul
Kayıt: 19.01.2006
22.05.2008-17:33 #44852
pinar23 yazdi
 
Evet Timur dediğin gibi GetField oldu çok teşekkür ederim.
Sende image processing falan ilgiliyormusun???


Önemli değil.

Hayır ilgilenmiyorum, sen sorunca merak ettim söylediğin sınıfa, dll i buldum ve baktım neymiş diye smile





Hayat varsa umut vard?r...
www.timureroglu.com

Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb