Класс MyController должен создавать класс в соответствии с типом enum - PullRequest
0 голосов
/ 16 апреля 2010

GenoTipController должен создать класс в соответствии с типом перечисления. у меня есть 3 класса: _Company, _Muayene, _Radyoloji. Также у меня есть метод GetPersonel класса CompanyView. если вы посмотрите GenoTipController, мои коды требуют рефакторинга. Ты меня понимаешь? мне нужен класс в соответствии с типом ewnum, я должен произвести класс. Например; case DataModelType.Radyoloji должен вернуть radyoloji = new Radyoloji. Все должно быть в одном корпусе?


 public abstract class _Company
    {
        public abstract List<Personel> GetPersonel();

        public abstract List<Prim> GetPrim();

        public abstract List<Finans> GetFinans();
    }

    public abstract class _Radyoloji
    {
        public abstract List<string> GetRadyoloji();
    }
    public abstract class _Satis
    {
        public abstract List<string> GetSatis();
    }
    public abstract class _Muayene
    {
        public abstract List<string> GetMuayene();
    }

    public class Company: _Company
    {

        public override List<Personel> GetPersonel()
        {
            throw new NotImplementedException();
        }

        public override List<Prim> GetPrim()
        {
            throw new NotImplementedException();
        }

        public override List<Finans> GetFinans()
        {
            throw new NotImplementedException();
        }
    }

    public class Radyoloji : _Radyoloji
    {
        public override List<string> GetRadyoloji()
        {
            throw new NotImplementedException();
        }
    }

    public class Satis : _Satis
    {
        public override List<string> GetSatis()
        {
            throw new NotImplementedException();
        }
    }

    public class Muayene : _Muayene
    {
        public override List<string> GetMuayene()
        {
            throw new NotImplementedException();
        }
    }

 public class GenoTipController
    {
        public _Company GenerateCompany(DataModelType modeltype)
        {
            _Company company = null;
            switch (modeltype)
            {
                case DataModelType.Radyoloji:
                    break;
                case DataModelType.Satis:
                    break;
                case DataModelType.Muayene:
                    break;
                case DataModelType.Company:
                    company = new Company(); 
                    break;
                default:
                    break;
            }

            return company;

        }

        public _Muayene GenerateMuayene(DataModelType modeltype)
        {
            _Muayene muayene = null;
            switch (modeltype)
            {
                case DataModelType.Radyoloji:
                    break;
                case DataModelType.Satis:
                    break;
                case DataModelType.Muayene:
                    muayene = new Muayene();
                    break;
                case DataModelType.Company:
                    break;
                default:
                    break;
            }

            return muayene;

        }

        public _Radyoloji GenerateRadyoloji(DataModelType modeltype)
        {
            _Radyoloji radyoloji = null;
            switch (modeltype)
            {
                case DataModelType.Radyoloji:
                    radyoloji = new Radyoloji();
                    break;
                case DataModelType.Satis:
                    break;
                case DataModelType.Muayene:

                    break;
                case DataModelType.Company:
                    break;
                default:
                    break;
            }

            return radyoloji;

        }
    }

    public class CompanyView
    {
        public static List<Personel> GetPersonel()
        {
            GenoTipController controller = new GenoTipController();
            _Company company = controller.GenerateCompany(DataModelType.Company);
             return company.GetPersonel();

        }
 }

    public enum DataModelType
    {
        Radyoloji,
        Satis,
        Muayene,
        Company
    }
}

если использовать метод oleksiy.t:

 public class GenoTipController
    {


        public object CreateByEnum(DataModelType modeltype)
        {
            string enumText = modeltype.ToString(); // will return for example "Company"
            Type classType = Type.GetType(enumText); // the Type for Company class
            object t = Activator.CreateInstance(classType); // create an instance of Company class

            return t;
        }
    }

    public class CompanyView
    {
        public static List<Personel> GetPersonel()
        {
            GenoTipController controller = new GenoTipController();
            _Company company = controller.CreateByEnum(DataModelType.Company);
             return company.GetPersonel();

        }
   }
    public enum DataModelType
    {
        Radyoloji,
        Satis,
        Muayene,
        Company
    }

альтернативный текст http://i40.tinypic.com/14sdqpw.png

я сталкиваюсь с ошибкой: мне нравится метод oleksiy, но как я могу его использовать?

Ответы [ 3 ]

1 голос
/ 16 апреля 2010

Взгляните на фабричный шаблон , который, как я думаю, вы ищете.

пример кода.

public interface IPizza
{
    decimal Price { get; }
}

public class HamAndMushroomPizza : IPizza
{
    decimal IPizza.Price
    {
        get
        {
            return 8.5m;
        }
    }
}

public class DeluxePizza : IPizza
{
    decimal IPizza.Price
    {
        get
        {
            return 10.5m;
        }
    }
}

public class HawaiianPizza : IPizza
{
    decimal IPizza.Price
    {
        get
        {
            return 11.5m;
        }
    }
}

public class PizzaFactory
{
    public enum PizzaType
    {
        HamMushroom,
        Deluxe,
        Hawaiian
    }

    public static IPizza CreatePizza(PizzaType pizzaType)
    {
        IPizza ret = null;

        switch (pizzaType)
        {
            case PizzaType.HamMushroom:
                ret = new HamAndMushroomPizza();

                break;
            case PizzaType.Deluxe:
                ret = new DeluxePizza();

                break;
            case PizzaType.Hawaiian:
                ret = new HawaiianPizza();

                break;
            default:
                throw new ArgumentException("The pizza type " + pizzaType + " is not recognized.");
        }

        return ret;
    }
}

public class PizzaLover
{
    public static void Main(string[] args)
    {
        Dictionary<PizzaFactory.PizzaType, IPizza> pizzas = new Dictionary<PizzaFactory.PizzaType, IPizza>();

        foreach (PizzaFactory.PizzaType pizzaType in Enum.GetValues(typeof(PizzaFactory.PizzaType)))
        {
            pizzas.Add(pizzaType, PizzaFactory.CreatePizza(pizzaType));
        }

        foreach (PizzaFactory.PizzaType pizzaType in pizzas.Keys)
        {
            System.Console.WriteLine("Price of {0} is {1}", pizzaType, pizzas[pizzaType].Price);
        }
    }
}

Output:
Price of HamMushroom is 8.5
Price of Deluxe is 10.5
Price of Hawaiian is 11.5
0 голосов
/ 16 апреля 2010

Используя метод, который вы описали после редактирования, вам нужно привести объект к типу _Company:

_Company company = controller.CreateByEnum(DataModelType.Company) as _Company;

или

_Company company = (_Company)controller.CreateByEnum(DataModelType.Company);

Хотя я бы порекомендовал не использовать этот метод и предложить инструкцию switch, поскольку это избавит вас от ошибок во время выполнения.

Возможно, я не вижу этого на вашем примере (или, может быть, уже слишком поздно ночью), но если ни один из этих элементов не наследуется от одного базового класса или не реализует тот же интерфейс, то вам придется знать, какой класс вы используете когда вы создаете его экземпляр для доступа к любому из его членов.

0 голосов
/ 16 апреля 2010

Вы можете использовать соглашение об именах для имен Enum и имен классов и создавать экземпляры с помощью отражения:

namespace MyNamespace
{
    public enum DataModelType { Company, Person }

    public class Company
    {
    }

    public class Person
    {
    }

    public class ObjectFactory
    {
        public static object CreateByEnum(DataModelType modelType)
        {
            string enumText = modelType.ToString(); // will return for example "Company"
            Type classType = Type.GetType("MyNamespace." + enumText); // the Type for Company class
            object t = Activator.CreateInstance(classType); // create an instance of Company class

            return t;
        }
    }
}
...