如何将类型而不是实例传递给C#中的函数?

时间:2011-02-26 04:08:45

标签: c# .net reflection types

我试图使用反射来枚举类字段和方法,以便在Web应用程序中进行一些自动化。我也在抽象这个,以便我可以通过任何课程。

有没有办法我可以某种方式直接将类型传递给枚举的函数而不是类型的实例?

我希望来电方看起来像这样:

var m = new MyClass(AClassOfSomeTypeIDefined);

我想避免创建一个实例,因为这会误导任何可能使用该类的人(因为该实例未直接使用)。

3 个答案:

答案 0 :(得分:3)

using System;

public void UseType(Type t) {
    // do something with t using reflection techniques - e.g.
    Console.WriteLine("compat with int? {0}", typeof(int).IsAssignableFrom(t));
}

使用C#typeof关键字和您要传递的数据类型进行调用。

// Examples...
UseType( typeof(int) );
UseType( typeof(System.Int32) );
UseType( typeof(System.Windows.Controls.Button) );
UseType( typeof(IDisposable) );
UseType( typeof(WhateverTypeYouWant) );

System.Type是你已经知道的反射的基石之一,所以用它来运行。


其他说明
根据您对类型的处理方式,以下外围设备详细信息可能会有用。

要在运行时创建Type的实例而不在编译时使用new关键字,请使用System.Activator类。 e.g。

// Create a List of strings like: new List<string>();
var list = (List<string>) Activator.CreateInstance( typeof(List<string>) );

答案 1 :(得分:1)

是的,只需使用班级的Type即可。获得该类型有两种基本方法:

Foo foo = new Foo();
Type myType = foo.GetType();
Type myTyp2 = typeof(Foo);

如果您只知道运行时的类型(反射更常见),则可以使用GetType();如果您已经知道编译时的类型,则可以使用typeof()

在你的例子中,这就是。

var m = new MyClass(typeof(Foo));

答案 2 :(得分:1)

您可以像传输任何其他参数一样传递Type对象。

class MyClass
{
    public MyClass(Type yourType)
    {
        // do as you please with yourType
    }
}

致电:

var m = new MyClass(typeof(YourType));