Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 7th, 2012  |  syntax: None  |  size: 2.97 KB  |  hits: 10  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Type equality check in C#
  2. public abstract class CompositionPlugin { ... }
  3.        
  4. public class MyCompositionPlugin : CompositionPlugin { ... }
  5.        
  6. public class Framework {
  7.  
  8.     public IList<CompositionPlugin> CompositionPlugins = new List<CompositionPlugin>();
  9.  
  10.     public CompositionPlugin GetCompositionPlugin(Type ofType)
  11.     {
  12.         foreach (CompositionPlugin plugin in CompositionPlugins)
  13.         {
  14.             if (plugin.GetType().Equals(ofType))
  15.                 return plugin;
  16.         }
  17.  
  18.         throw new ArgumentException("A composition plugin of type " + ofType.FullName + " could not be found");
  19.     }
  20. }
  21.        
  22. Framework framework = new Framework();
  23. // Adding the plugin to the framework is done by loading an assembly and
  24. // checking if it contains plugin-compatible classes (i.e. subclasses
  25. // of <CompositionPlugin>)
  26. framework.RegisterAssembly("E:\Projects\Framework\MyPlugin\bin\Debug\MyPlugin.dll");
  27. CompositionPlugin plugin = framework.GetCompositionPlugin(typeof(MyCompositionPlugin));
  28.        
  29. if (ofType.IsAssignableFrom(plugin.GetType())
  30.        
  31. class A {}
  32.  
  33. bool TestType(A item, Type ofType)
  34. {      
  35.     return item.GetType().Equals(ofType);
  36. }
  37.        
  38. Console.WriteLine(TestType(new A(), typeof(A))); // True
  39. Console.WriteLine(TestType(new A(), typeof(string))); // False
  40.        
  41. class CompositionPlugin {}
  42. class MyCompositionPlugin : CompositionPlugin  {}
  43.  
  44. // Define other methods and classes here
  45. bool TestType(CompositionPlugin item, Type ofType)
  46. {      
  47.     return item.GetType().Equals(ofType);
  48. }
  49.        
  50. Console.WriteLine(TestType(new CompositionPlugin(),
  51.             typeof(CompositionPlugin))); //True
  52. Console.WriteLine(TestType(new CompositionPlugin(),
  53.             typeof(MyCompositionPlugin))); //False
  54. Console.WriteLine(TestType(new MyCompositionPlugin(),
  55.             typeof(CompositionPlugin))); //False
  56. Console.WriteLine(TestType(new MyCompositionPlugin(),
  57.             typeof(MyCompositionPlugin))); //True
  58.        
  59. if (plugin is ofType)
  60.     return plugin;
  61.        
  62. public class Framework {
  63.  
  64.     public IList<CompositionPlugin> CompositionPlugins = new List<CompositionPlugin>();
  65.  
  66.     public CompositionPlugin GetCompositionPlugin(Type ofType)
  67.     {
  68.         using(var writer = System.IO.File.CreateText(@"C:test.log"))
  69.         {
  70.             writer.WriteLine("ofType: " + ofType.toString());
  71.             foreach (CompositionPlugin plugin in CompositionPlugins)
  72.             {
  73.                 writer.WriteLine("plugin: " + plugin.GetType().toString());
  74.                 if (plugin.GetType().Equals(ofType))
  75.                     return plugin;
  76.             }
  77.         }
  78.  
  79.         throw new ArgumentException("A composition plugin of type " + ofType.FullName + " could not be found");
  80.     }
  81. }
  82.        
  83. public CompositionPlugin GetCompositionPlugin(Type ofType)
  84. {
  85.     foreach (CompositionPlugin plugin in CompositionPlugins)
  86.         if (ofType.AssemblyQualifiedName.Equals(plugin.GetType().AssemblyQualifiedName))
  87.             return plugin;
  88.  
  89.     throw new ArgumentException("A composition plugin of type " + ofType.FullName + " could not be found");
  90. }