型がマングル型からジェネリック インターフェイス型を実装しているかどうかを判断する
ジェネリック インターフェイスとクラスにより、柔軟性と型安全性が大幅に向上します。コードは含まれていますが、それらを操作したり検査したりするのはやや面倒な場合があります。この記事では、マングルされた型しか利用できない場合に、型がジェネリック インターフェイスを実装しているかどうかを判断するという特定の問題に取り組みます。
例として、次の型定義について考えてみましょう。
public interface IFoo<T> : IBar<T> {} public class Foo<T> : IFoo<T> {}
問題は、型 Foo
この状況に対処する一般的に提案されている方法は、リフレクションを利用することです。アプローチ方法は次のとおりです。
// Assume a mangled type 'typeof(Foo)' is provided. Type fooType = typeof(Foo); // Check if 'Foo' implements the generic interface 'IBar<T>'. bool isBar = fooType.GetInterfaces().Any(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IBar<>)); Console.WriteLine(isBar);
この LINQ クエリは、汎用インターフェイスのみに焦点を当てて、Foo によって実装されたインターフェイスを検査します。これらのジェネリック インターフェイスのいずれかが IBar<> の定義に一致する場合、true を返します。
このアプローチを利用すると、マングルされた型を扱う場合でも、型が特定のジェネリック インターフェイスを実装しているかどうかを効果的に判断できます。型のイントロスペクションと分析のニーズに貴重な洞察を提供します。
以上が型がマングルされた型を使用してジェネリック インターフェイスを実装しているかどうかを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。