- Type equality check in C#
- 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));
- if (ofType.IsAssignableFrom(plugin.GetType())
- class A {}
- bool TestType(A item, Type ofType)
- {
- return item.GetType().Equals(ofType);
- }
- Console.WriteLine(TestType(new A(), typeof(A))); // True
- Console.WriteLine(TestType(new A(), typeof(string))); // False
- class CompositionPlugin {}
- class MyCompositionPlugin : CompositionPlugin {}
- // Define other methods and classes here
- bool TestType(CompositionPlugin item, Type ofType)
- {
- return item.GetType().Equals(ofType);
- }
- Console.WriteLine(TestType(new CompositionPlugin(),
- typeof(CompositionPlugin))); //True
- Console.WriteLine(TestType(new CompositionPlugin(),
- typeof(MyCompositionPlugin))); //False
- Console.WriteLine(TestType(new MyCompositionPlugin(),
- typeof(CompositionPlugin))); //False
- Console.WriteLine(TestType(new MyCompositionPlugin(),
- typeof(MyCompositionPlugin))); //True
- if (plugin is ofType)
- return plugin;
- public class Framework {
- public IList<CompositionPlugin> CompositionPlugins = new List<CompositionPlugin>();
- public CompositionPlugin GetCompositionPlugin(Type ofType)
- {
- using(var writer = System.IO.File.CreateText(@"C:test.log"))
- {
- writer.WriteLine("ofType: " + ofType.toString());
- foreach (CompositionPlugin plugin in CompositionPlugins)
- {
- writer.WriteLine("plugin: " + plugin.GetType().toString());
- if (plugin.GetType().Equals(ofType))
- return plugin;
- }
- }
- throw new ArgumentException("A composition plugin of type " + ofType.FullName + " could not be found");
- }
- }
- public CompositionPlugin GetCompositionPlugin(Type ofType)
- {
- foreach (CompositionPlugin plugin in CompositionPlugins)
- if (ofType.AssemblyQualifiedName.Equals(plugin.GetType().AssemblyQualifiedName))
- return plugin;
- throw new ArgumentException("A composition plugin of type " + ofType.FullName + " could not be found");
- }