To reduce downvotes: (Skippable at first)
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#.
How override base things such as int
\ string
?
I tried:
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) { }
}
But when I tried:
Test.f( new string( ) );
It error'd Cannot implicitly convert type 'System.String' to 'string'
. I tried moving my System.String
to just string
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 .cs
files without that mscorlib.dll
, but I can't find a way to do it.
Even a way to reach to csc.exe source code may help. (This is critical.)
Yes, you will have to not reference mscorlib.dll
. Otherwise there will be two System.String
classes, and clearly the predefined (C# Specification given) type string
cannot be both of them.
See /nostdlib
C# compiler option. The page also describes how to do it with a setting in the Visual Studio IDE.
You need to write really many other required types (or copy-paste them) when you do not refer mscorlib.dll
!