今回も小ネタを。最近ネタが尽き気味です><
2 つのクラスが is-a 関係かどうかを調べたい。でも、Type オブジェクトしか与えられていない…。こんなとき、どうしよう?BaseType プロパティを再帰的にチェックするしかないのか?!
大丈夫。
ヾヽ'::::::::::::::::::::::::::'', / 時 .あ ま ヽ ヾゝ:::::::::::::::::::::::::::::{ | 間 .わ だ | ヽ::r----―‐;:::::| | じ て | ィ:f_、 、_,..,ヽrリ .| ゃ る | L|` "' ' " ´bノ | な よ | ', 、,.. ,イ ヽ い う / _ト, ‐;:- / トr-、_ \ な / , __. ィイ´ |:|: ヽ-- '.: 〃 `i,r-- 、_  ̄ ̄ 〃/ '" !:! |:| :、 . .: 〃 i // ` ヽヾ / / |:| ヾ,、` ´// ヽ !:! '、` ! |:| // ヾ==' ' i i' |:| ', | ...:// l / __ , |:|::.. | とニとヾ_-‐' ∨ i l ' l |< 天 ヾ,-、_: : : .ヽ と二ヽ` ヽ、_::{:! l l ! |' 夂__ -'_,ド ヽ、_}-、_:ヽ
Type クラスの IsAssignableFrom メソッドを使えば一発です。
using System; namespace TypeSample { public class Foo { } public class Bar : Foo { } public class Hoge : Bar { } class Program { static void Main(string[] args) { Console.WriteLine("Hoge クラスは Foo クラスを継承しているか?"); Console.WriteLine(typeof(Foo).IsAssignableFrom(typeof(Hoge))); // => True Console.WriteLine("Bar クラスは Program クラスを継承しているか?"); Console.WriteLine(typeof(Program).IsAssignableFrom(typeof(Bar))); // => False Console.ReadLine(); } } }
EnterpriseLibrary のソースコードを読んで、このメソッドの存在を知りました。便利なメソッドがあるもんだ。