仅限C#动态类名称 - >在运行时生成

时间:2016-11-24 02:15:35

标签: c# class dynamic classname

这严格用于OOP的学习目的。

我有一个继承的层次结构,WANTS看起来像这样:

`    
     -> Fruit->0-n fruits classes
     -> Vegetable -> 0-n vegetable classes
 Food-> Milk -> 0-n milk classes
     -> Grain -> 0-n grain classes
     -> Meat -> 0-n meat classes
`    

基类是食物,所有水果/蔬菜/牛奶/谷物/肉类延伸食物。然后水果类可能有一个苹果,香蕉,柠檬等的孩子。所以苹果,香蕉,柠檬将延长水果,延长食物。

现在你可以想象,世界上有很多不同类型的水果/蔬菜/奶/谷物/肉。为每个人制作一个单独的课程太多了。

我想要完成的是:

  1. 创建一个动态类,其标识ClassName类型将根据用户输入的内容而更改。
  2. 功能与此类似:

    public class ${ClassName} : ${Category}{
    //Imagine I can put a variable name right where ${ClassName} is that holds Banana.  
    //I'd then determine ${Category} simply from the location that the user entered the value Banana.
    
    //I'd now have: 
    }   public class Banana : Fruit{
    
    }
    

    在这种情况下,我并不关心类中任何方法/变量/属性的变化。它们都将保持不变,我只希望ClassName更改为相应的名称。

    这可能吗?还是我在童话般的土地?理想情况下,上述方法成功后。我希望能够使用object.getType()获取ClassName,并且如果用户输入其中一个,则返回类似Apple,Banana,Lemon的内容。

1 个答案:

答案 0 :(得分:0)

基于Jim的评论,我认为你对课程有错误的想法。理想情况下(取决于域),您希望使用Name的属性为Fruit基类建模。 “香蕉”是水果,“苹果”是水果,......等等。

public class Fruit { 
    public string Name { get; set; }
}

如果您确实需要具体,可以创建使用Fruit作为基类的类。可能沿着Berry,Drupe,Legume等行。然后你仍然需要一个Name属性来定义水果的具体实例是什么“Raspberry”,“Blueberry”,...

public class Berry : Fruit { 
    // berry-specific properties
}

一旦你对类和结构化有了更基本的理解,以及具体和抽象类型之间的区别,我建议你看看Factory MethodAbstract Factory设计模式。如果您确实需要在运行时确定具体类型,那些描述了您可以使用的技术。