代码之家  ›  专栏  ›  技术社区  ›  loki

MyController类必须根据枚举类型生成类

  •  0
  • loki  · 技术社区  · 16 年前

    
     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
        }

    alt text

    我面对面错误:我喜欢oleksiy方法,但我如何使用它?

    3 回复  |  直到 6 年前
        1
  •  0
  •   user38123    16 年前

    可以对枚举名和类名使用命名约定,并通过反射创建实例:

    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;
            }
        }
    }
    
        2
  •  1
  •   Pieter Germishuys    16 年前

    factory pattern ,这就是我想你要找的。

    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
    
        3
  •  0
  •   nexus    16 年前

    使用编辑后描述的方法,需要将对象强制转换为键入\u Company:

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

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

    尽管我建议不要使用这种方法,并建议使用switch语句,因为这样可以避免运行时错误。

    也许我无法从您的示例中看到它(或者可能太晚了),但是如果这些项都不是从同一基类继承的,也不是实现同一接口的,那么当您实例化它以访问它的任何成员时,您必须知道您正在使用的类。