Ben*_*ack 3 .net c# vb.net generics reflection
如何反映作为通用参数提供的类型的名称?我真的想知道在C#和VB.NET中是如何完成的.请参阅以下示例代码和预期响应.
在C#中:
public void Test<T>()
{
Console.WriteLine("The supplied type is {0}",???)
}
Run Code Online (Sandbox Code Playgroud)
在VB.NET中
Public Sub Test(Of T)()
Console.WriteLine("The supplied type is {0}",???)
End Sub
Run Code Online (Sandbox Code Playgroud)
执行Test<String>()或Test(Of String)()应该产生:
The supplied type is String
Dar*_*rov 16
C#(typeof运算符):
public void Test<T>()
{
Console.WriteLine("The supplied type is {0}", typeof(T));
}
Run Code Online (Sandbox Code Playgroud)
VB.NET(GetType运算符):
Public Sub Test(Of T)()
Console.WriteLine("The supplied type is {0}", GetType(T))
End Sub
Run Code Online (Sandbox Code Playgroud)
C#typeof(T)和VB.NET GetType(T)返回一个System.Type对象,该对象具有检索特定信息的属性和方法Type.默认情况下,System.Type's .ToString()方法将返回Type的完全限定名称.仅返回Name类型,调用typeof(T).Name或分别GetType(T).Name在C#或VB.NET中.
达林的回答是正确的,但值得注意的是,如果你收到T一个参数实例,你也可以使用.GetType():
public void Test<T>(T target)
{
Console.WriteLine("The supplied type is {0}", target.GetType());
}
Run Code Online (Sandbox Code Playgroud)
只是一种不同的方法(typeof将检查类型参数,而.GetType()使用该类型的实例).
由于丹尼尔在评论中指出存在细微差别来考虑: typeof(T)将返回类型参数的类型,而.GetType()将返回对象的确切类型-这可能继承从T,并typeof(T).IsAssignableFrom(target.GetType())可能返回true -但具体的具体类型可能会有所不同.
一个例子:
using System;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
GenericClass<TypeX>.GenericMethod(new TypeX());
GenericClass<TypeX>.GenericMethod(new TypeY());
Console.ReadKey();
}
}
public class TypeX {}
public class TypeY : TypeX {}
public static class GenericClass<T>
{
public static void GenericMethod(T target)
{
Console.WriteLine("TypeOf T: " + typeof(T).FullName);
Console.WriteLine("Target Type: " + target.GetType().FullName);
Console.WriteLine("T IsAssignable From Target Type: " + typeof(T).IsAssignableFrom(target.GetType()));
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果输出:
传入TypeX的实例作为参数:
TypeOf T:ConsoleApplication2.TypeX
目标类型:ConsoleApplication2.TypeX
T IsAssignable From Target Type:True
传入TypeY的实例作为参数:
TypeOf T:ConsoleApplication2.TypeX
目标类型:ConsoleApplication2.TypeY
T IsAssignable From Target Type:True
| 归档时间: |
|
| 查看次数: |
199 次 |
| 最近记录: |