0

私は 2 つのクラス、つまりclassAclassBを継承していclass1ます。

クラスAをインスタンス化する必要があることに基づいて、「A」のような文字列を送信したい

私の上司はenum、コードを書くためにスイッチケースを使用する代わりに使用するように私に頼みました.

これを書いてどうするんだよ。

4

4 に答える 4

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 に答える
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 に答える
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 に答える
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 に答える