2

如何将变量的类型放入方法参数中,因为某些东西是由类变量定义的?例如:

class MyClass {
   private Type _type;

   public MyClass(Type type) {
      _type = type;
   }

   public void SomeMethod(_type param) { //... }
   public _type OtherMethod() {}

}

所以,我的想法是,我可以将动态类型设置为类中的变量,并将该Type变量用作其他对象的类型。

是否可以在 C# 中执行此操作?

编辑:

我决定让我的问题更清楚,并解释我为什么要求这样的功能。我试过泛型。然而,泛型的问题在于,每次引用该类的对象时,我都必须声明该类的类型,例如:MyClass<TSomeType> param

在我的场景中,我有一个List<MyClass> dataList包含MyClass. 如果我在 MyClass 上有一个泛型,那么 dataList 必须是List<MyClass<TSomeType>>. 在这种情况下,我被卡住了,因为列表只能包含MyClass<TSomeType>. 一旦我为整个班级声明了类型,我就不能拥有其他类型的类型。这就是为什么我想知道是否有更动态的方式来声明一个类型,就像我可以将一个类的类型存储到一个变量中,然后像一个类类型一样使用这个变量。

4

2 回答 2

5

是否可以在 C# 中执行此操作?

不,编译器会用 a 做什么MyClass?它不可能知道方法调用是否有效。

不过,您可以使用泛型:

class MyClass<T>
{
    public void SomeMethod(T param) { ... }
    public T OtherMethod() { ... }
}

此时,当编译器看到 a 时,MyClass<string>它知道它SomeMethod("foo")是有效的,但SomeMethod(10)不是。

如果您在执行之前真的不知道类型,那么您不妨使用object

class MyClass
{
    public void SomeMethod(object param) { ... }
    public object OtherMethod() { ... }
}

Type...如果您真的愿意,可能会针对 a 进行执行时检查。

于 2012-10-25T14:49:00.490 回答
2

我认为您在这里寻找的是泛型- 这将为您提供您所追求的以及编译时类型安全的好处。

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
于 2012-10-25T14:48:56.890 回答