Det er Sparta, eller er det?

Det er Sparta, eller er det?

Dybest set, fordi det er, hvad navneopslagsreglerne siger. I C# 5-specifikationen er de relevante navngivningsregler i afsnit 3.8 ("Navneområde og typenavne").

De første par kugler - afkortet og kommenteret - lød:

Så det sidste punkt er det, der opfanger Sparta klasse hvis den første punkt ikke finder noget... men når basisklassen Place definerer en grænseflade Sparta , den bliver fundet før vi betragter Sparta klasse.

Bemærk, at hvis du laver den indlejrede type Place.Sparta en klasse i stedet for en grænseflade, kompilerer den stadig og returnerer false - men compileren udsender en advarsel, fordi den ved, at en forekomst af Sparta vil aldrig være en forekomst af klassen Place.Sparta . Ligeledes hvis du beholder Place.Sparta en grænseflade, men lav Sparta klasse sealed , får du en advarsel, fordi ingen Sparta instans nogensinde kunne implementere grænsefladen.


Når man løser et navn til dets værdi, bruges "nærheden" af definitionen til at løse tvetydigheder. Uanset hvilken definition der er "nærmest", er den, der er valgt.

Interfacet Sparta er defineret inden for en basisklasse. Klassen Sparta er defineret i det indeholdende navneområde. Ting defineret inden for en basisklasse er "tættere" end ting defineret i det samme navneområde.