如何在 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位于远程服务器中。我需要在不继承和不修改基类的情况下添加属性。

注意:不要创建派生类来添加此属性,因为我 无法更改基类实例。我有权 访问实例,我可以在不接触 基类。

如何在 C# 中向没有继承的类添加其他属性

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做任何您想要的事情。