2011-04-18 61 views
1

的类型。对不起,如果不清楚。我试图确定一个对象作为,而不是实际的类型的对象的类型。C#确定我不完全知道如何问这个问题好对象

说我有以下两类:

public class A{ 
    public A() { 
     string thisTypeName = this.GetType().???; // the value I'm looking for here is "A" not "B" 
    } 
} 

public class B : A { } 

我不希望是......

string thisTypeName = this.GetType().BaseType.Name; 

...因为如果我决定做这个...

public class C : B { } 

...然后现在我的this.GetType()。BaseType将引用类B,而不是A.

是否有一个内置的方式做到这一点?我猜我可能可以写上类型的扩展方法,将做我想做的。

+0

在您的例子,你可以只使用'字符串thisTypeName = typeof(A)' – 2011-04-18 22:47:48

+0

如果你已经知道_this_的类型(因为你在类的代码中),你为什么试图从'GetType()'这样的方法获得它? – 2011-04-18 23:06:40

+0

你想要的是哪种类型?所有类都继承“Object”类,因此它将成为任何类的“最基础”类。你想要不是“对象”的“最基础”类吗?你想在同一个程序集中的“最基础”类吗? – Guffa 2011-04-18 23:21:32

回答

0
public static Type GetActualBaseType(this object obj) 
    { 
     Type type = obj.GetType(); 

     while (type.IsNested) 
      type = type.BaseType; 

     return type; 
    } 

,你可以尝试使用

+0

这是朝正确方向迈出的一步,但我不一定总是想要“最基础”类型。说我正在做这个.GetType()。里面的构造函数B而不是A;在这种情况下,我想这个.GetType()。?返回对B型的引用。 – Tbabs 2011-04-18 22:57:03

+0

你究竟想要什么?在OP中,你说你不想在C#中使用“中间类型” – bevacqua 2011-04-18 23:01:13

0

你可以使用System.Diagnostics.StackTrace获取堆栈帧,然后拿到​​当前方法:

var st = new StackTrace(); 
Console.WriteLine(st.GetFrame(0).GetMethod().DeclaringType.ToString()); 
0

你真的需要一个给定的类实例的类型字符串,或者你想知道如何处理不同的子类型有一定的基类的微妙的情况下有趣的例子摆?

在后一种情况下,它可能会更好使用is关键字,像这样:

class A {} 
class B : A {} 
class C : B {} 
class Aaa : A {} 

// NB: order of if() statements is important below, start with most specific ones 
public void doSomething(A obj) { 
    if(obj is Aaa) { 
    // do something specific for Aaa 
    } else if(obj is C) { 
    // do something specific for C 
    } else if(obj is B) { 
    // do something specific for B 
    } else { 
    // do general A stuff 
    } 
} 

我不知道,如果这是你试图去,但这个问题你提出和你评论很明显,获取基类的名字并不是真正的问题。

+0

,它应该读取'obj是Aaa'或'obj作为Aaa'来执行动态强制转换,如果不可能的话将返回null – sehe 2011-04-18 23:24:57

0

你仿佛在寻找在编译时已知:

在B的构造函数需要的B型

在A的构造函数需要的A型...

所以你可以简单的写typeof(A)typeof(B)

如果你想获得通过反射该声明当前方法的类型

MethodBase.GetCurrentMethod().DeclaringType 
相关问题