C#3.5を使用しています。
BaseClassはStackTraceを使ってクラス名を取得できるメソッドを持っています。
それを継承したDerivedClass側でそのクラス名「DerivedClass」を取得したいのですが、
次のようなやり方では「BaseClass」が取得されてしまいます・・・
あくまでBaseClass側に記述したメソッドのままで、DerivedClass側のクラス名を取得するには
どのようにしたら良いのでしょうか?
public class BaseClass
{
public string className;
public string ClassName
{
get
{
if (className == null)
{
StackTrace st = new StackTrace(false);
StackFrame sf = st.GetFrame(0);
className = sf.GetMethod().ReflectedType.Name;
}
return className;
}
set { className = value; }
}
}
public class DerivedClass : BaseClass
{
}
var c = new DerivedClass();
MessageBox.Show(c.ClassName);// BaseClassと表示される
こんなのどうですか?
class Program
{
public class BaseClass
{
}
public class DerivedClass : BaseClass
{
}
static void Main(string[] args)
{
var c = new DerivedClass();
Console.WriteLine(c.GetType().Name);
}
}
お礼
ご返答ありがとうございます。 なるほど、別にStackTraceを使わなくても そのやり方で取得できたんですね・・・