我不會做,真的。屬性應該由構造函數明確地初始化,這就是它們存在的原因。不要忘記初始化字段。
但我不知道爲什麼你需要它,所以這裏是一些代碼。
可靠地設置任何屬性(包括私有屬性)並不容易。通常我做這樣的(從我的頭,我會檢查我的真正的代碼明天):
var properties = this.GetType().Properties(
BindingFlags.Instance
| BidningFlags.NonPublic
| BindingFlags.Public);
foreach(PropertyInfo property in properties)
{
// if a property is declared on a base type with a private setter,
// get the definition again from the declaring type,
// unless you can't call the setter.
// Probably it is even more reliable to get the properties setter
// from the declaring type.
if (property.DeclaringType != this)
{
property = property.DeclaringType.GetProperty(
property.PropertyName,
BindingFlags.Instance
| BidningFlags.NonPublic
| BindingFlags.Public);
}
if (property.CanWrite)
{
// assumed that you define a dictionary having the default values.
property.SetValue(this, defaultValues[property.PropertyType];
}
}
爲什麼你想這樣做?你的答案極大地影響了答案。 – Gabe 2010-10-04 20:54:15
我有一個類應該都具有相同的默認值的許多屬性,但在閱讀了迴應並思考它之後,再一次在構造函數的一個屬性中設置默認值會更清晰。 – etoisarobot 2010-10-05 13:27:24