创建参数类型的对象

时间:2010-09-29 18:00:26

标签: c# .net generics objectinstantiation

哎。是否有可能有一个方法允许用户传入某种类型的参数并让该方法实例化该类型的新对象?我想做这样的事情:(我不知道仿制药是否可行,但试了一下)

    public void LoadData<T>(T, string id, string value) where T : new()
    {

        this.Item.Add(new T() { ID=id, Val = value});

    }

上述方法不起作用,但想法是用户传递他们想要实例化的对象类型,该方法将根据这些参数填写详细信息。 我可以传递一个Enum参数并执行Switch并根据它创建新对象,但有更好的方法吗? 感谢

3 个答案:

答案 0 :(得分:6)

执行此操作的唯一方法是添加一个界面,该界面还指定要设置的参数:

public interface ISettable
{
    string ID { get; set; }
    string Val { get; set; }
}

public void LoadData<T>(string id, string value) where T : ISettable, new()
{
    this.Item.Add(new T { ID = id, Val = value });
}

不幸的是,我目前无法进行测试验证。

答案 1 :(得分:1)

如果IDVal属性来自公共基类或接口,则可以约束T继承该类型。

例如:

public void LoadData<T>(string id, string value) where T : IMyInterface, new()

然后,您可以在IMyInterface个实例上使用T的所有成员。

如果它们只是具有相同名称的不同类型的不相关属性,则必须使用反射。

此外,您需要从参数列表中删除T,

答案 2 :(得分:0)

更动态的类型语言可以轻松完成。我确信它可以用C#,它只需要付出更多的努力。 Theres可能是一些反射库,可以帮助你。

为什么不在调用方法时创建对象?你想要做的事情对我来说似乎过于复杂。