首页 > 解决方案 > 具有默认数据的通用对象创建方法

问题描述

我想在一个类中有两个简单的调用,这些调用会被其他类转换。就像是:

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(),我希望它以某种方式转到另一个类,在那里我创建一个新的任何东西,并将其属性填充为特定值。感觉就像我很接近但在这里错过了一块拼图。

我的最终目标是让调用尽可能简单/可读。任何帮助表示赞赏。

我确实意识到简单地调用一个创建和填充每个对象的类可能会更容易,但这对我来说是一个学习练习,我想尝试让它尽可能通用。

标签: c#oopgenerics

解决方案


我建议做这样的事情:

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";
    }
}

推荐阅读