Object içindeki veya object içindeki object içindeki property yi setlemek?

Başlatan mir_as82, 25 Şubat 2020, 17:24:52

mir_as82

Merhaba,
Elimde Object türünden bir nesne(myObject)var.
Bu nesne iç içe nesnelerden de oluşabilir. Amacım "Password" isminde string türden propertyyi bulup "*" olarak setlemek.
Bunu nasıl yapabilirim?
Aşağıdaki gibi bir method olacak.
SetProperty(myObject, "Password", "*")

bocek

Interface ile yapabilirsiniz:
interface IPassword // isim önemli değil
{
    string Password{ get;set; }
}

class MyObject:IPassword // sınıfımıza interface'imizi ekliyoruz.
{
    public string Password{ get;set; } // IPassword'dakinin aynısı olmak zorunda. yoksa zaten hata verir.
}

bu tanımlamaları yaptıktan sonra:
MyObject myObject = new MyObject(); // bir yerlerde bu yapılıyordur..
IPassword ipass = myObject as IPassword; // property'sini değiştireceğimiz objeyi interface'e geçiyoruz
ipass.Password = "*";
1 ya da 0. işte 'bit'ün mesele..

mir_as82

Aslında bu işlemin runtime da yapılması gerekiyor.
Benim objelerin içinde property isimlerini arayıp, property name alanları Password olanların değeri * yapılacak

mufitsozen

Alıntı yapılan: mir_as82 - 26 Şubat 2020, 10:17:28Aslında bu işlemin runtime da yapılması gerekiyor.
Benim objelerin içinde property isimlerini arayıp, property name alanları Password olanların değeri * yapılacak

JVM isleyisi ile ilgili detayli bilgi sahibi olmaniz gerekir bunun icin. Yapmaniz gereken sey cok basit degil. Tecrube kazanmak ve sorulariniza cevap bulmak icin "Java Serialization and Deserialization" bahsine ve oradaki orneklere bakabilirsiniz.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

bocek

o zaman:
public void SetProperty(MyObject object, string propertyName, string newValue)
{
  var property = object.GetType().GetProperty(propertyName);
  property?.SetValue(object, newValue,null);
}

ya da yine interface ile yapmak istersek:
public void SetProperty(MyObject object,  string newValue)
{
  IPassword ipass = object as IPassword;
  ipass?.Password = newValue;
}
1 ya da 0. işte 'bit'ün mesele..