2015-03-31 8 views
6

Lässt vergessen, warum ich das brauche.Können wir eine Klasse mit dem Namen "class" erstellen?

Können wir eine Klasse mit dem Namen "Klasse" erstellen.

Der nachfolgende Code führte zu einem Kompilierungsfehler, da die Klasse ein Reserveschlüsselwort ist.

public class class 
{ 

} 

so gibt es einen Hack oder eine Art und Weise C# Compiler zu täuschen? :)

Diese Frage wurde von Interviewer in meinem letzten Interview gestellt und er sagte mir, dass es möglich ist.

+2

Sie Klassen sollten sowieso Namen in Großbuchstaben 'CLASS' haben. –

+0

Hinzufügen zu Alex feinen Kommentar - _ [DO-Namen ** Klassen ** und Strukturen mit Substantiven oder Nominalphrasen, mit ** PascalCasing **.] (Https://msdn.microsoft.com/en-us/library/ms229040 % 28v = vs.110% 29.aspx) _ – MickyD

Antwort

21

könnten Sie verwenden:

public class @class 
{ 

} 

Aber warum Sie das wollen?

C# Keywords

Schlüsselwörter sind vordefiniert, reservierte Bezeichner, die dem Compiler spezielle Bedeutungen haben. Sie können nicht als Bezeichner in Ihrem Programm verwendet werden, es sei denn sie enthalten @ als Präfix. Zum Beispiel ist @if ein gültiger Bezeichner, aber wenn nicht, ist das ein Schlüsselwort.


Was ich von dieser Antwort gelernt habe, war, dass neue Schlüssel-Worte werden nicht global, sondern nur als Kontextschlüsselworte hinzugefügt werden, um zu vermeiden brechen in früheren Versionen geschriebene Programme. Sie finden eine Liste im obigen Link.

So Interessanterweise gilt dies (besser: Kompilieren) Code:

public class var 
{ 
    public void foo() 
    { 
     var var = new var(); 
    } 
} 

Hier ist ein anderes:

public class dynamic 
{ 
    public void foo() 
    { 
     dynamic dynamic = new dynamic(); 
    } 
} 

Aber dies nie tun. Es wird Ihren anderen Code, wo Sie zuvor var oder dynamic verwendet haben, brechen.

+3

Das ist nichts, was man in handgeschriebenem Code haben möchte, aber es kann ziemlich oft im generierten Code passieren, zB wenn man eine Tabelle namens * Classes *, * Groups * usw. hat und ein ORM Code für erzeugen lässt it – SWeko

+0

Wie ich oben erwähnte, wurde diese Frage in einem meiner Interviews gefragt, also suchte ich nach einer Lösung. Danke Es funktioniert. Warte nur 15 Minuten, um die Antwort zu akzeptieren. –

+2

@JineshJain Es ist wichtig zu beachten, dass das '@' auf der C# -Compiler-Ebene "interpretiert" wird. Wenn es kompiliert wird, ist die Funktion 'class', nicht' @ class' (Sie können es sehen, wenn Sie den Code zerlegen) siehe zum Beispiel http://goo.gl/mmyLQU – xanatos

8

Eine weitere Alternative ist durch Unicode

using System; 

public class Program 
{ 
    public static void Main() 
    { 
     cl\u0061ss a = new cl\u0061ss(); 
     Console.WriteLine(a.GetType().Name); 
    } 
} 

public class cl\u0061ss 
{ 


} 

Hinweis: Console.WriteLine()Klasse

DotNetFiddle Link here ist gedruckt wird.

+1

Sollte zum verschleierten C# -Wettbewerb – DrKoch

+0

gehen @DrKoch ha ha ... Ich habe gerade diese Idee von msdn Link https://msdn.microsoft.com/en-us/library/aa664670(v=vs.71).aspx –

+0

Nicht alles, was möglich ist zu tun ist eine gute Idee zu tun ... – DrKoch

-3

Die meisten Programmierer verwenden Unterstrich '_' am Anfang des Namens einer Variablen oder was auch immer, wenn es ein reserviertes Wort ist, z.

public class _class 
{ 

} 

Variablendeklarationen Beispiel

int _int; 
+1

Aber dann ist der Klassenname "_class" und nicht "class", wie von OP angefordert (der Interviewer). –

Verwandte Themen