这严格用于OOP的学习目的。仅在C#中动态类名 - >在运行时生成
我有继承的是要像这样的层次:
`
-> 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
`
的基类是食品,所有的水果/蔬菜/牛奶/粒/肉类延长食品。然后水果班可能有一个苹果,香蕉,柠檬型等孩子。所以苹果,香蕉,柠檬将延长水果,延长食物。
现在,你可以想象,世界上有很多不同类型的水果/蔬菜/奶/谷类/肉类。为每个人制作单独的课程太多。
我想做到的是:
- 创建动态类,其识别类名类型依据是什么在用户输入将改变。
的功能类似于这样:
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之类的东西,如果用户输入其中的一个。
我认为你还没有类的概念,*香蕉*是一个水果的名称,不应该是一个类。所以它将成为水果类中的一个名称属性。同样的水果将是一种财产。想想人。 *人*将是一个班级,但他的名字“约翰”不会。看起来像它是一个*事物类,而不是一个*事物本身的规范。 – Jim
我个人不会这样做。这是一个练习,看看这种类型的功能是否可能。我正在研究C#动态类,并想知道这个特定的部分是否持有我的要求。 – Jetompki
我同意@Jim,通常在OOD中,一个类有一组独特的参数和函数,如果两个对象不应该有不同的能力,它们应该是同一个类。例如,如果我们有一个名为“Drinks”的课程,并且功能是'void drink()',那么它将覆盖水,牛奶,苏打水等。您可以从用户输入中加载名称,而无需试图快速创建派生类型。 –