我有一个班级MobileInfo
public class MobileInfo
{
public string MobileName { get; set; }
public string MobileOS { get; set; }
}
我需要再添加一个属性
public string MobileModel { get; set; }
我在主项目中的100多个类文件中实现了Model
类,基类MobileInfo
位于远程服务器中。我需要在没有继承的情况下添加Property,而不需要修改基类。
注意:不要创建派生类来添加此属性,因为我 无法更改基类实例。我已获得许可 访问实例,我可以添加属性而不触及 基类。
答案 0 :(得分:3)
System.ComponentModel.TypeDescriptor()
var curPhone = new MobileInfo();
curPhone.MobileName = "iphone";
curPhone.MobileOS = "ios";
TypeDescriptor.AddAttributes(typeof(MobileInfo), new simpleAttribute());
AttributeCollection collection = TypeDescriptor.GetAttributes(curPhone);
simpleAttribute attr = ((simpleAttribute)collection[typeof(simpleAttribute)]);
if (attr != null)
{
attr.MobileModul = "s6";
//MessageBox.Show(attr.MobileModul);
}
}
public class simpleAttribute : Attribute
{
public string MobileModul { get; set; }
}
答案 1 :(得分:0)
您无法在不更改代码的情况下为类添加属性。
使用System.Reflection.Emit
方法,您可以创建动态程序集,它将复制MobileInfo
和整个后代类层次结构。请参阅creating type和method for set parent。在您可以将所需属性添加到MobileInfo
的生成副本之后。接下来,您应该配置抽象工厂,它将在您查询类型时返回生成的类型。
但这很难。我强烈建议您重新制作项目架构。由于MobileInfo
位于远程服务器上,因此您的本地数据模型应具有MobileInfo
的副本,并且不应继承远程MobileInfo
,此外,您应该具有从远程服务器数据进行映射的方法将对象建模为本地。因此,您可以使用您想要的本地MobileInfo
。