我有两个类classA
,classB
它们都继承自class1
.
现在我想发送一个像“A”这样的字符串,基于我应该实例化A类
我的老板让我使用enum
而不是使用 switch case 来编写代码。
我该怎么写这个。
我有两个类classA
,classB
它们都继承自class1
.
现在我想发送一个像“A”这样的字符串,基于我应该实例化A类
我的老板让我使用enum
而不是使用 switch case 来编写代码。
我该怎么写这个。
我猜你的老板要求你在 switch 语句中使用枚举:
MyClassEnum classToCreate = MyClassEnum.ClassA;
switch(classToCreate)
{
case MyClassEnum.ClassA:
return new ClassA();
case MyClassEnum.ClassB:
return new ClassB();
}
如果您包含执行测试和创建对象的代码部分,我们可能会提供更多指导。
您可以创建一个查找工厂
_map = new Dictionary<Option, Func<Class1>>();
_map.Add(Option.A, () => new ClassA());
_map.Add(Option.B, () => new ClassB());
然后决心获得正确的课程
public Class1 Resolve(Option option)
{
Func<Class1> result;
if(_map.TryGetValue(option, out result))
return result();
else
return null;
}
尝试
public class Class1
{
public enum class1: {classA, classB}
public static Class1 Make(class1 which)
{
switch (which)
{
case classA: return new ClassA();
case classB: return new ClassB();
default: return null;
}
}
}
public class ClassA: Class1 {}
public class ClassA: Class1 {}
如果您想避免切换,您可以始终保持某种查找,例如以下之一:
using System;
using System.Collections.Generic;
class Class1 { }
class ClassA : Class1 { }
class ClassB : Class1 { }
class Program
{
private static readonly Dictionary<string, Type> _typeMap =
new Dictionary<string, Type>
{
{ "A", typeof(ClassA) },
{ "B", typeof(ClassB) },
};
private static readonly Dictionary<string, Func<Class1>> _funcMap =
new Dictionary<string, Func<Class1>>
{
{ "A", () => new ClassA() },
{ "B", () => new ClassB() },
};
Class1 CreateViaTypeMap(string typeName)
{
var type = _typeMap[typeName];
return Activator.CreateInstance(type) as Class1;
}
Class1 CreateViaFuncMap(string typeName)
{
var func = _funcMap[typeName];
return func();
}
}