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

时间:2016-01-19 06:19:38

标签: c# inheritance

我有一个班级MobileInfo

public class MobileInfo
{
    public string MobileName { get; set; }
    public string MobileOS { get; set; }
}

我需要再添加一个属性

public string MobileModel { get; set; }

我在主项目中的100多个类文件中实现了Model类,基类MobileInfo位于远程服务器中。我需要在没有继承的情况下添加Property,而不需要修改基类。

  

注意:不要创建派生类来添加此属性,因为我   无法更改基类实例。我已获得许可   访问实例,我可以添加属性而不触及   基类。

2 个答案:

答案 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 typemethod for set parent。在您可以将所需属性添加到MobileInfo生成副本之后。接下来,您应该配置抽象工厂,它将在您查询类型时返回生成的类型。

但这很难。我强烈建议您重新制作项目架构。由于MobileInfo位于远程服务器上,因此您的本地数据模型应具有MobileInfo的副本,并且不应继承远程MobileInfo,此外,您应该具有从远程服务器数据进行映射的方法将对象建模为本地。因此,您可以使用您想要的本地MobileInfo