如何在 C# 中向没有继承的类添加其他属性
本文关键字:继承 添加 属性 其他 | 更新日期: 2023-09-27 18:30:52
我有一个类MobileInfo
public class MobileInfo
{
public string MobileName { get; set; }
public string MobileOS { get; set; }
}
我需要再添加一个属性
public string MobileModel { get; set; }
我在主项目中的 100 多个类文件中实现了 Model
类,基类MobileInfo
位于远程服务器中。我需要在不继承和不修改基类的情况下添加属性。
注意:不要创建派生类来添加此属性,因为我 无法更改基类实例。我有权 访问实例,我可以在不接触 基类。
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; }
}
如果不更改代码,则无法为类添加属性。
使用 System.Reflection.Emit
方法,您可以创建动态程序集,这将复制您的MobileInfo
和后代类的整个层次结构。请参阅为设置父级创建类型和方法。之后,您可以将所需的属性添加到生成的MobileInfo
副本中。接下来,您应该配置抽象工厂,它将在查询类型时返回生成的类型。
但这相当困难。我强烈建议重新制作您的项目架构。由于MobileInfo
位于远程服务器上,因此您的本地数据模型应具有MobileInfo
的副本,并且不应继承远程MobileInfo
,此外,您应该具有从远程服务器数据模型对象映射到本地的方法。因此,您可以使用本地MobileInfo
做任何您想要的事情。