0

我有两个类classAclassB它们都继承自class1.

现在我想发送一个像“A”这样的字符串,基于我应该实例化A类

我的老板让我使用enum而不是使用 switch case 来编写代码。

我该怎么写这个。

4

4 回答 4

1

我猜你的老板要求你在 switch 语句中使用枚举:

MyClassEnum classToCreate = MyClassEnum.ClassA;
switch(classToCreate)
{
    case MyClassEnum.ClassA:
        return new ClassA();
    case MyClassEnum.ClassB:
        return new ClassB();
}

如果您包含执行测试和创建对象的代码部分,我们可能会提供更多指导。

于 2012-05-07T01:44:36.423 回答
1

您可以创建一个查找工厂

_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;

}
于 2012-05-07T02:06:15.947 回答
0

尝试

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 {}
于 2012-05-07T01:47:41.173 回答
0

如果您想避免切换,您可以始终保持某种查找,例如以下之一:

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();
    }
}
于 2012-05-07T02:44:41.930 回答