title: How to override base classes\structs such as int, string?
body: <p>To reduce downvotes: (Skippable at first)</p>
  
  <blockquote>
    <p>I am aware that this question sounds pointless and\or weird. I am creating JIT that takes C# code compiles it with csc.exe, extracts the IL and parallize it into CUDA, and I want to override some of the things in C#.</p>
  </blockquote>
  
  <p>How override base things such as <code>int</code>\ <code>string</code>?
  I tried:</p>
  
  <pre><code>class String { /* In namespace System of course */
      BasicString wrap_to;
      public String( ) {
          wrap_to = new BasicString( 32 ); // capacity
      }
      public String( int Count ) {
          wrap_to = new BasicString( Count );
      }
      public char this[ int index ] {
          get { return wrap_to[ index ]; }
          set {
              if ( wrap_to.Handlers != 1 )
                  wrap_to = new BasicString( wrap_to );
              wrap_to[ index ] = value;
          }
      }
      ...
  }
  ... // not in namespace System now
  class Test {
      public static void f(string s) { }
  }
  </code></pre>
  
  <p>But when I tried:</p>
  
  <pre><code>Test.f( new string( ) );
  </code></pre>
  
  <p>It error'd <code>Cannot implicitly convert type 'System.String' to 'string'</code>. I tried moving my <code>System.String</code> to just <code>string</code> in the global scope and it error'd on the class itself. Any ideas how? I think somehow it could help if I can compile my <code>.cs</code> files without that <code>mscorlib.dll</code>, but I can't find a way to do it.</p>
  
  <p>Even a way to reach to csc.exe source code may help. (This is critical.)</p>