具有默认数据

时间:2018-05-09 17:42:58

标签: c# oop generics

我希望在一个类中有两个简单的调用,这些调用可以被其他类转换。类似的东西:

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

我的最终游戏是尽可能简单/可读。 任何帮助表示赞赏。

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

1 个答案:

答案 0 :(得分:4)

我建议做这样的事情:

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