首页 > 解决方案 > 如何创建通用包装类来扩展任何模型

问题描述

我如何将相同的字段添加到对象而不关心原始属性具有哪些其他字段。例如,我想使用以下

public class Wrapper<T> : T
        {
            public string Status { get; set; }
            public DateTime CallDate { get; set; }
        }

但收到错误cannot derive from T because it is a parameter type

更多细节:

如果我有一个原始模型,例如:

public class OriginalModel {
     public string name { get; set; }
}

我希望能够将其扩展到:

    public class ExtemdedOriginalModel {
         public string name { get; set; }
         public string Status { get; set; }
         public DateTime CallDate { get; set; }
    }

但我希望它是通用的,这样我就可以添加两个附加属性,而不必为我希望能够扩展的所有类添加接口。

标签: c#generics

解决方案


您应该使用组合而不是继承。或者换句话说,您可以轻松地创建一个将实际数据作为其成员的通用包装器,而不是在其继承链中:

public class Wrapper<T>
{
    public T Data { get; set; }
    public string Status { get; set; }
    public DateTime CallDate { get; set; }

    public Wrapper(T data) { this.Data = data ; }
}

现在您仍然可以“扩展”任何类型:

var m = new Wrapper<int>(3);
m.Status = "MyStatus";

推荐阅读