PDA

View Full Version : اضافه کردن Property به یک کلاس در زمان اجرا



mmbguide
یک شنبه 22 دی 1398, 11:48 صبح
سلام

من یک کلاس دارم که تعدادی Property داخلش هست و به نوعی ساختار اطلاعاتم هستش. چطور میتونم در زمان اجرا Property به کلاس اضافه و یا کم کنم؟ اصلا امکان داره یا خیر؟

the king
یک شنبه 22 دی 1398, 13:08 عصر
سلام

من یک کلاس دارم که تعدادی Property داخلش هست و به نوعی ساختار اطلاعاتم هستش. چطور میتونم در زمان اجرا Property به کلاس اضافه و یا کم کنم؟ اصلا امکان داره یا خیر؟

از NET. 4 به بعد DynamicObject وجود داره. برای اینکه بتونه موارد dynamic رو در زمان اجرا مقدار دهی کنه در پروژه تون به اسمبلی Microsoft.CSharp رفرنس بدید. (منوی ...Project > Add Reference)


public class Class1 : System.Dynamic.DynamicObject
{
private readonly Dictionary<string, object> _props = new Dictionary<string, object>();

public Class1()
{
_props.Add("Name", "ali");
_props.Add("Two", 2);
_props.Add("Pi", Math.PI);
}

public override IEnumerable<string> GetDynamicMemberNames()
{
return _props.Keys;
}

public override bool TrySetMember(SetMemberBinder binder, object value)
{
if (_props.ContainsKey(binder.Name))
{
_props[binder.Name] = value;
return true;
}
return false;
}

public override bool TryGetMember(GetMemberBinder binder, out object result)
{
return _props.TryGetValue(binder.Name, out result);
}
}



private void Form1_Load(object sender, EventArgs e)
{
dynamic x = new Class1();
x.Name = "Reza";
MessageBox.Show(x.Pi.ToString());
}

mmbguide
یک شنبه 22 دی 1398, 21:46 عصر
تشکر بابت راهنمایی