来自C#中字符串的名称实例

时间:2015-02-19 09:16:12

标签: c# .net

假设我有一个类,其构造函数从文件读取的数据中获取其值,是否也可以使用字符串中的名称创建该类的实例。这样我就可以为每个打开的文件创建一个类的实例,并且可以自动加载构造函数。

//User chooses file to open
//Read ChocolateCake.txt values
string className = Path.GetFileName(path);
//code to remove .txt    

//Instance name is taken from className
Cake "ChocolateCake" = new Cake(ingredient1, ingredient2, etc);

如何使用我读过的文件的名称创建Cake实例?

3 个答案:

答案 0 :(得分:4)

你可以使用字典

var cakes = new Dictionary<string,Cake>();
cakes.Add(className, new Cake(ingredient1, ingredient2));

答案 1 :(得分:4)

不,你不能这样做。然而,您可以使用generic Dictionary<string, Cake>并将蛋糕存放在那里......

var cakes = new Dictionary<string, Cake>();

cakes变量将包含多个Cake类型的对象,每个对象都以唯一的string值键入。

添加蛋糕就像......一样简单。

cakes.Add("ChocolateCake", new Cake(incredient1, incredient2, etc));

然后您可以按键值访问您的蛋糕(例如您的示例中的类名),因此:

cakes["ChocolateCake"];

答案 2 :(得分:1)

有时当我看到这样的问题需要某种对象负责创建一个合适的类型(例如你的实例中的Cake)时,基于输入(在你的情况下是字符串),是的,一个字典是一个很好的起点,但是我一直觉得这是一个指示更灵活的方法,例如使用Factory模式。

工厂建造物品。他们通常使用一些参数来帮助确定要构建的具体对象类型。工厂的返回类型通常是某种抽象,即接口或抽象类,工厂构建抽象的具体实现。

这意味着您可以拥有许多不同类型的Cake对象,并且工厂将根据输入字符串中定义的内容返回正确的对象。其中一个重要的好处是调用者不需要预先了解预期的具体类型,它将使用接口类型进行操作,这意味着当添加新的“Cake”类型时,您不需要继续更新调用者的代码

值得一读的是抽象类工厂,this是一个很好的小介绍。

相关问题