と
public abstract class CompositionPlugin { ... }
と
public class MyCompositionPlugin : CompositionPlugin { ... }
オブジェクトの型が特定の型と等しいかどうかを確認したい:
public class Framework {
public IList<CompositionPlugin> CompositionPlugins = new List<CompositionPlugin>();
public CompositionPlugin GetCompositionPlugin(Type ofType)
{
foreach (CompositionPlugin plugin in CompositionPlugins)
{
if (plugin.GetType().Equals(ofType))
return plugin;
}
throw new ArgumentException("A composition plugin of type " + ofType.FullName + " could not be found");
}
}
メソッドは次のように呼び出されます。
Framework framework = new Framework();
// Adding the plugin to the framework is done by loading an assembly and
// checking if it contains plugin-compatible classes (i.e. subclasses
// of <CompositionPlugin>)
framework.RegisterAssembly("E:\\Projects\\Framework\\MyPlugin\\bin\\Debug\\MyPlugin.dll");
CompositionPlugin plugin = framework.GetCompositionPlugin(typeof(MyCompositionPlugin));
しかし、テストを行うと、要求したリストにそのタイプのオブジェクトが確実に含まれているにもかかわらず、このチェックは常に失敗します。
私の理解では、 -ListMyCompositionPlugin
内で見つかった最初のインスタンスを返す必要があります。CompositionPlugins
私のタイプチェックは間違っていますか?なんで?それはどのように正しく行われますか?