normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

リフレクションを利用して、クラスから情報を引き出そう

とりあえず抜き出してみる

相変わらず文を書くのが苦手な私はとりあえずコードをぱぱっと書きますよ。
ちなみに、リフレクションでの情報取得方法はこれだけではありません。細かいオプション(BindingFlags)辺りをいじると、より詳細な情報が取得できます。

  • サンプルコード
public interface IDummy { }

[Serializable]
public abstract class AbstractDummy { }

[Obsolete]
public class ConcreteDummy : AbstractDummy, IDummy
{
    class NestClass { }
}
  • 出力結果
nest class = ConsoleApplication1.ConcreteDummy+NestClass
impl interface = ConsoleApplication1.IDummy
super class = ConsoleApplication1.AbstractDummy
attribute = System.ObsoleteAttribute

リフレクション用のコード

  • ネストクラスの取得
//Nestしたクラスを取得
foreach (var type in typeof(ConcreteDummy).GetNestedTypes(BindingFlags.NonPublic))
{
    Console.WriteLine("nest class = {0}",type);
}
  • 実装インターフェースの取得
//インターフェースを取得
foreach (var type in typeof(ConcreteDummy).GetInterfaces())
{
    Console.WriteLine("impl interface = {0}",type);
}
Console.WriteLine("super class = {0}", typeof(ConcreteDummy).BaseType);
  • 属性の取得
foreach (var obj in typeof(ConcreteDummy).GetCustomAttributes(true))
{
    Console.WriteLine("attribute = {0}", obj);
}