Laden...

C# - Escapesequenzen direkt in C#

Erstellt von Palin vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.876 Views
P
Palin Themenstarter:in
1.090 Beiträge seit 2011
vor 8 Jahren
C# - Escapesequenzen direkt in C#

Wuste ich auch noch nicht.


var \u0078 = "Wert der Variablen x";
Console.WriteLine(x);

var \u0061\u0062\u0063 = "Wert der Variablen abc";
Console.WriteLine(abc);

Console.ReadKey();

Würde mich mal Interessiern, was andere denken, was das Ergebnis ist (Bevor sie es Ausprobieren).

Quelle: .net snippets:C# - Escapesequenzen direkt in C#

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

3.170 Beiträge seit 2006
vor 8 Jahren

Hallo,

jop, schon mal gesehen: so stehts auch in der C# Language Specification, Abschnitt E.3.1

Unter Mono kompiliert der Code übrigens nicht, das x kriegt er noch hin, das abc führt zu> Fehlermeldung:

The name `abc' does not exist in the current context (CS0103)

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

309 Beiträge seit 2008
vor 8 Jahren

Obfuscatoren nutzen das z.B. im dem sie dann die Variablennamen in irgendwelche exotischen (nicht druckbare) Zeichen umwandeln um die Rückverfolgbarkeit des Codes im Reflector zu erschweren. Ich glaub der .net Reflector stürzt sogar bei bestimmten Zeichen ab. Zumindest ältere Versionen.

using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}

49.485 Beiträge seit 2005
vor 8 Jahren

Hallo Palin,

der Grund für Escapesequenzen in Bezeichnern liegt wohl darin, dass man das Encoding des Quellcodes frei wählen (und dies dem Compiler z.B. per /codepage-Option mitteilen) kann. Viele Programmierer werden dafür (in Deutschland typischerweise) Windows-1252/Latin-1 verwenden. Das ist allerdings ein reiner 8-bit-Zeichensatz; darin sind also nur 256 Zeichen codiert. Wenn nun jemand anderes eine Bibliothek schreibt und für deren Quellcode einen anderen Zeichensatz verwendet und z.B. für einen Methodennamen ein Zeichen verwendet, das in Windows-1252 nicht enthalten ist, könnte man ohne die Escapesequenzen in Bezeichnern, die Methode aus dem eigenen Windows-1252-codierten Quellcode nicht aufrufen.

Anderseits würde ich - gerade aus diesem Grund - nachdrücklich dafür plädieren, für Bezeichner (neben den Ziffern von 0-9 und ggf. noch dem Unterstrich) nur die 2*26 ASCII-Buchstaben verwenden, also keine Umlaute und schon gar nicht Zeichen, die in Windows-1252 nicht enthalten sind.

herbivore