A: 95 bayt
class A{public static int i=2;static void Main(string[]args){System.Console.Write(args[0]);}}//
Çevrimiçi deneyin!
B: 438 + 18 bayt
class A{public static int i=0;}
class B{static void Main(string[]args){if(A.i<1){System.Console.Write(args[0]);return;}var a=@"class A{{public static int i=2;static void Main(string[]args){{System.Console.Write(args[0]);}}}}//class A{{public static int i=0;}}
class B{{static void Main(string[]args){{if(A.i<1){{System.Console.Write(args[0]);return;}}var a=@{0}{1}{0};System.Console.Write(a,'{0}',a);}}}}";System.Console.Write(a,'"',a);}}
Çevrimiçi deneyin!
A + B: 533 + 18 bayt
class A{public static int i=2;static void Main(string[]args){System.Console.Write(args[0]);}}//class A{public static int i=0;}
class B{static void Main(string[]args){if(A.i<1){System.Console.Write(args[0]);return;}var a=@"class A{{public static int i=2;static void Main(string[]args){{System.Console.Write(args[0]);}}}}//class A{{public static int i=0;}}
class B{{static void Main(string[]args){{if(A.i<1){{System.Console.Write(args[0]);return;}}var a=@{0}{1}{0};System.Console.Write(a,'{0}',a);}}}}";System.Console.Write(a,'"',a);}}
Çevrimiçi deneyin!
A ve B, girdiyi komut satırı argümanı olarak alır. A + B, herhangi bir girişi yok sayar. B ve A + B’de 18 bayt/p:StartupObject=BMSBuild'e gönderilen seçenek . Sadece A + B'de kesinlikle gerekli, ancak B'de bulunmamasını da hile gibi görünüyordu. Bu şekilde, A + B için derleyici bayrakları A (yok) için derleyici bayrakları ve B için derleyici bayraklarıdır.
açıklama
Program A basittir. A sınıfı ibaşlangıç durumuna getirilen (kullanılmayan) statik bir değişken içerir 2ve çalıştırıldığında ilk argümanını yazdırır. //Sonunda A + B kodu için önemlidir, ancak A kendisinde hiçbir şey yapmaz.
B programı, izolasyon bakımından gariptir, fakat esasen aynıdır. Baştan ibaşlatılan statik bir değişken içeren bir A Sınıfı oluşturur 0ve daha sonra Program A ile aynı olan Ana Sınıf B yöntemini çalıştırır, çünkü A.i1'den küçüktür ve tuhaf şeylerden önce geri döner. Yeni satırlar burada gerekli değildir, ancak A + B için önemlidir.
Birleştirildiğinde, //gelen A Programı Programı B'den A sınıfı beyanı dışında yorumlar fakat yeni satır B sınıfı izin gayet A.ibaşvurmak için 2yerine Programı A'dan değeri. Derleyici Bayrağı, Programı A.Main () 'in de bulunduğundan B.Main () işlevini çalıştırır. Sonuç, Program A + B'nin argümanını vermemesidir, ancak bunun yerine sadece standart C # quine olan B.Main () 'in aşağıdaki bölümüne gider .