c# - 如何创建通用包装类来扩展任何模型
问题描述
我如何将相同的字段添加到对象而不关心原始属性具有哪些其他字段。例如,我想使用以下
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; }
}
但我希望它是通用的,这样我就可以添加两个附加属性,而不必为我希望能够扩展的所有类添加接口。
解决方案
您应该使用组合而不是继承。或者换句话说,您可以轻松地创建一个将实际数据作为其成员的通用包装器,而不是在其继承链中:
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";
推荐阅读
- android - Android Studio 严重问题 Gradle 同步失败:系统找不到指定的路径
- leaflet - 地理编码器:L.Control.Geocoder.nominatim(),没有工作角度
- javascript - 如何访问此 JSON 字符串中的某些值?
- java - 客户端/服务器 java 故障 - 客户端在服务器上重新连接时发送多条消息
- c# - 如何使用 C# 在 Windows 上获取应用程序的性能数据?
- reactjs - 无法从 Styled Components 对象呈现页面中的道具
- python - 如果熊猫数据框中的下一个单元格为 0,我如何保持上一个单元格的值?
- javascript - 为什么这个 SVG 没有显示在 Google 地图 (JavaScript) 中?
- android - 如何更改导航栏的颜色(手势模式)?
- java - 如何最好地对期望设置 ThrreadLocal 变量的类使用 junit 测试?