如何将变量的类型放在方法参数中,因为某个类是由类变量定义的?例如:
class MyClass {
private Type _type;
public MyClass(Type type) {
_type = type;
}
public void SomeMethod(_type param) { //... }
public _type OtherMethod() {}
}
所以,我的想法是,我可以为类中的变量设置动态类型,并使用Type
变量作为其他对象的类型。
是否可以在C#中执行此操作?
修改
我决定让我的问题更清楚,并解释我为什么要求这样的功能。我试过Generics。然而,泛型的问题是,每当我引用该类的对象时,我必须声明类的类型,如:MyClass<TSomeType> param
在我的方案中,我的List<MyClass> dataList
包含MyClass
。如果我在MyClass上有一个泛型,那么dataList必须是List<MyClass<TSomeType>>
。在这种情况下,我被卡住了,因为列表只能包含MyClass<TSomeType>
。一旦我宣布了全班的类型,我就不能拥有其他类型的类型。这就是为什么我想知道是否有一种更传统的方式来声明一个Type,就像我可以将一个类的类型存储到一个变量,然后像类类型一样使用这个变量。
答案 0 :(得分:5)
是否可以在C#中执行此操作?
没有。编译器对MyClass
做了什么?它无法知道方法调用是否有效。
你可以使用泛型来代替:
class MyClass<T>
{
public void SomeMethod(T param) { ... }
public T OtherMethod() { ... }
}
此时,当编译器看到MyClass<string>
时,它知道SomeMethod("foo")
有效,但SomeMethod(10)
不是。
如果确实在执行时间之前不知道类型,那么您也可以使用object
:
class MyClass
{
public void SomeMethod(object param) { ... }
public object OtherMethod() { ... }
}
...如果你真的想要,可能会对Type
进行执行时检查。
答案 1 :(得分:2)
我认为你在这里寻找的是Generics - 这将为你提供你所追求的以及编译时类型安全的好处。
public MyClass<T>
{
public void SomeMethod(T param)
{
...
}
public T OtherMethod()
{
...
}
}
<强>用法强>
var intClass = new MyClass<int>();
intClass.SomeMethod("10"); // would cause a compile error
intClass.SomeMethod(10); // would compile ok
string result = intClass.OtherMethod(); // would cause a compile error
int result = intClass.OtherMethod(); // would compile ok