c# - 具有默认数据的通用对象创建方法
问题描述
我想在一个类中有两个简单的调用,这些调用会被其他类转换。就像是:
ObjectCreator.CreateBlank<Human>();
ObjectCreator.CreatePopulated<Human>();
ObjectCreator.CreateBlank<Dog>();
ObjectCreator.CreatePopulated<Dog>();
我目前这样做:
public class ObjectCreator
{
public static T CreateBlank<T>()
{
return Activator.CreateInstance<T>();
}
public static T CreatePopulated<T>()
{
//Somehow return new object with populated properties
}
}
我正在与人口稠密的部分作斗争。我希望它返回具有已定义属性的该类型的“默认”对象。我已经尝试了一些涉及传递接口的事情,但它很快就会变得混乱(我也不认为这会特别干净)
因此,如果我调用 ObjectCreator.CreatePopulated(),我希望它以某种方式转到另一个类,在那里我创建一个新的任何东西,并将其属性填充为特定值。感觉就像我很接近但在这里错过了一块拼图。
我的最终目标是让调用尽可能简单/可读。任何帮助表示赞赏。
我确实意识到简单地调用一个创建和填充每个对象的类可能会更容易,但这对我来说是一个学习练习,我想尝试让它尽可能通用。
解决方案
我建议做这样的事情:
public interface IPopulatable
{
void Populate();
}
public class ObjectCreator
{
public static T CreateBlank<T>() where T : new ()
{
return new T();
}
public static T CreatePopulated<T>() where T : IPopulatable, new()
{
var populatable = new T();
populatable.Populate();
return populatable;
}
}
public class Human : IPopulatable
{
public string Name { get; set; }
public void Populate()
{
Name = "Joe";
}
}
推荐阅读
- tsql - 查询之间的 T-SQL 日期
- html - 有什么方法可以隐藏 html 静态网站上的 .html 扩展名?
- javascript - Angular - 使用 ngFor 创建手风琴菜单。需要在点击时自动关闭并打开另一个
- sql - 将 2 个 SQL 查询合并到一张表中
- sql-server - Azure DevOps Azure SQL 部署 - 服务器名称不正确
- math - 几乎不使用任何数学来测量两点之间的 GPS 距离?(完全不需要精度)
- php - 来自 Windows 的远程 MariaDB 连接:未捕获的 PDOException:数据包乱序。预期 0 收到 1. 数据包大小=71
- .net - 有没有办法使用 Github Actions 构建本机 .NET
- r - 如何使用 R 创建安全的 API?
- python - 如何改进此 pandas 数据转换以提高效率?