首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以在C#中从字符串映射到构造函数吗?

我可以在C#中从字符串映射到构造函数吗?
EN

Stack Overflow用户
提问于 2012-04-24 00:56:06
回答 3查看 153关注 0票数 1

我有字符串输入,根据输入的值,我想调用特定对象的构造函数(新Object1(int)、新Object2( string )、新Object3(int、int)等),所有这些都实现了IObject接口。

与其用明显的(缓慢的)方式链接if/int语句,我更愿意使用从字符串到构造函数的字典(例如{"object1“->新Object1(int)} )。

在C#中有什么方法可以这样做吗?也许可以将"typeof“与构造函数结合起来?我想避免工厂,因为这需要并行代码结构,这是我想避免的。

提前谢谢你

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-24 01:04:23

你可以这样做:

代码语言:javascript
运行
复制
var d = new Dictionary<string, Func<IObject>>();
d.Add("Object1", () => new Object1());
d.Add("Object2", () => new Object2());
d.Add("Object3", () => new Object3());
string typename = GetAStringFromSomewhere();
IObject foo = d[typename]();
票数 5
EN

Stack Overflow用户

发布于 2012-04-24 01:08:32

通常的方法是使用反射

特别是,Assembly.CreateInstance

票数 1
EN

Stack Overflow用户

发布于 2012-04-24 01:40:46

如何划分一个静态方法来为您想要的每个类创建一个对象,而不是使用一个字典映射字符串到静态生成器方法的委托类型?我知道这不是你想要的问题,但我现在不能对你的问题发表评论。

代码语言:javascript
运行
复制
class Program
{
    delegate object GetObjDelegate();
    static Dictionary<string, GetObjDelegate> Dic = new Dictionary<string, GetObjDelegate>();

    static void Main(string[] args)
    {
        Dic.Add("aaa", A.GetObj);
        Dic.Add("bbb", B.GetObj);

        object a = Dic["aaa"]();
        object b = Dic["bbb"]();
    }
}

class A
{
    public A()
    {
    }

    public static A GetObj()
    {
        return new A();
    }
}

class B
{
    public B()
    {
    }

    public static B GetObj()
    {
        return new B();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10290386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档