0
現在、私は、派生クラスのプロパティを反復し、DefaultValueAttribute記述子を使用してプロパティのDefault Valueをインスタンス化するルートクラスの宣言を持っています。私がしたいのは、これを単にDefaultValueのものからXmlElement、XmlAttribute、Xml名前空間の直列化に含まれる一連の属性に拡張することです。属性 - 比較
さまざまな定義済みの属性を処理するためのif/then/else文を大量に読み込むことなく、複数の属性を処理するために現在のデザインを拡張する際に問題があります。
現在のデザイン:
private void Initialize() {
foreach(PropertyDescriptor property in TypeDescriptor.GetProperties(this)) {
XmlElementAttribute xel = (XmlElementAttribute) property.Attributes[typeof(XmlElementAttribute)];
if(xel != null) {
this.AddElement(xel.ElementName , "");
}
DefaultValueAttribute attr = (DefaultValueAttribute) property.Attributes[typeof(DefaultValueAttribute)];
if(attr != null) {
property.SetValue(this , attr.Value);
}
}
}
提案デザイン:
private void Initialize() {
foreach(PropertyDescriptor property in TypeDescriptor.GetProperties(this)) {
foreach(Attribute attr in property.Attributes) {
if(attr = typeof(XmlElementAttribute)){
//do something
}else if(attr = typeof(DefaultValueAttribute)){
//do something
}
}
}
}
おもしろいことに、デリゲートフレームワークの使用については考えませんでした。 – GoldBishop