我的问题是关于在运行时定义实例类型,而这个类型是用户自定义的。 类似下面这样的:
Type instance1;
在运行时,用户将选择例如“int”,然后会有以下内容:
int instance1;
有什么建议吗?在这里进行向下转型是否有效?
class MyClass<T>
{
private T instance1 = default(T);
public MyClass(T initalvalue)
{
instance1 = initalvalue;
}
//... some more code
}
如果你没有更多地解释你想要达到的目的的细节,你可以使用一个通用方法*,你可以使用 C# 4的 dynamic
关键字,或者你可以使用反射来创建给定类型的实例。
*如果类型可以在编译时被知道,或者它是有限集中的一种类型,并且你选择了一个在编译时命名的类型(例如:用户将说其中之一:int
、char
或 double
,然后您将相应地使用正确的泛型)。如果类型完全不确定,您仍需要使用反射在运行时使用给定的类型实例化泛型。
我猜这就是你要找的内容:
Type myType = typeof(int);
int value = Activatior.CreateInstance(myType);
C# 4.0 中的动态关键字
dynamic
关键字/被强制转换成某种类型的object
)。我只是不确定哪种方法最适合你的应用程序,并能产生干净而有表现力的代码。这应该是我们的目标,对吧? - Philip Daubmeier