Per ridurre downvotes: (ignorabili in un primo momento)Come sovrascrivere le classi di base structs come int, string?
Mi rendo conto che questa domanda suona inutile e \ o strano. Sto creando JIT che prende il codice C# lo compila con csc.exe, estrae l'IL e lo confronta in CUDA, e voglio scavalcare alcune cose in C#.
Come ignorare le cose di base come int
\ string
? ho provato:
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) { }
}
ma quando ho provato:
Test.f(new string());
E error'd Cannot implicitly convert type 'System.String' to 'string'
. Ho provato a spostare il mio System.String
a solo string
nell'ambito globale e si è verificato l'errore sulla classe stessa. Qualche idea come? Penso che in qualche modo potrebbe aiutare se riesco a compilare i miei file .cs
senza quello mscorlib.dll
, ma non riesco a trovare un modo per farlo.
Anche un modo per raggiungere il codice sorgente csc.exe può essere d'aiuto. (Questo è fondamentale.)
Beh, il problema che si ha attualmente è la versione di 'String' non può essere convertita implicitamente al tipo standard 'stringa', sono 2 tipi completamente separati. Tuttavia, è possibile risolvere questo problema sostituendo l'operatore [implicito] (https://msdn.microsoft.com/en-us/library/z5z9kes2.aspx). – James
@James 'string' è l'oggetto stringa originale di C#, voglio sovrascriverlo.Se lo convertirò in quell'oggetto 'stringa originale 'non sarò in grado di usare la mia nuova stringa personalizzata e perderò le nuove informazioni che voglio introdurre nella mia nuova classe di stringhe. (Hai perso il punto forse.) – LyingOnTheSky
@LyingOnTheSky, puoi usare il tuo nuovo tipo tutto ciò che vuoi, ma non sarai in grado di passarlo al codice che è stato compilato per aspettarti il tipo originale 'System.String'. Dopo tutto, quel codice è stato compilato prima che il tuo tipo sia mai stato scritto - come ti aspetti che sappia come lavorare con il tuo tipo? Dovresti ricompilare 'mscorlib' e tutto il resto per usare il tuo tipo di stringa invece di' System.String'. –