代码之家  ›  专栏  ›  技术社区  ›  Blankdud

具有默认数据的通用对象创建方法

  •  1
  • Blankdud  · 技术社区  · 6 年前

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

    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 回复  |  直到 6 年前
        1
  •  4
  •   ivanPfeff    6 年前

    我建议您这样做:

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