( persicsb | 2016. 01. 05., k – 11:35 )

Csak hogy tudd: C# az nem Java. Itt nem kötelező a filenévnek a class nevével megegyeznie.
Egy nyelvnek (nyelvnek!) miért kéne tudnia, hogy milyen platformon fogják implementálni? Magának a nyelvnek nem kell tudnia, hogy a fordítási egységek fizikailag a filerendszerben hogyan helyezkednek el, az csak a fordító dolga, hogy az X classt az x.cs, az x.cpp vagy a /com/components/classes/foo/whatever/X fileból húzza be. A fizikai implementáció totálisan lényegtelen.

Az, hogy egyes nyelvek előírják (nem a fordítók, hanem a nyelvek), hogy egy adott nyelvi elemnek mi kell, hogy legyen a megvalósítása, az baj.
A Java esetében is igazából nem nyelvi előírás az, hogy az A.java-ban az A classnak kell lennie, ez a fordítónak az elvárása. Simán csinálhatnál olyan Java fordítót, ami ezt nem várja el. Illetve olyan JVM-et is, ami az xyz.class betöltésénél betölti neked az XyZ classt. Ugyanis nem a file neve a lényeg, hanem a tartalma, és a classfile format le is írja, hogy az adott file melyik classt tartalmazza. A HotSpot default classloader implementációja a ludas itt igazából, amikor az XYZ class betöltésénél az XYZ.class filet keresi, és mást nem.