A c # kézikönyv, az általános nyelvi specifikáció
Mint tudják, a különböző programozási nyelveken ugyanazok a szoftver konstrukciók kifejezik saját egyedi, nyelvi specifikus módon. Például a C # -nél a karakterlánc-összefűzést plusz (+) jel mutatja, és a VB általában egy ampersand () értéket használ. Még abban az esetben a kifejezés két különböző nyelven, ugyanazon programozási idiómák (pl funkciók, amelyek nem adnak vissza értéket), akkor nagyon valószínű, hogy a látszólag szintaxis nézne nagyon különböző.
Már kimutatták, ilyen kis eltérések a szintaxis a .NET környezet nem jelentős annak a ténynek köszönhető, hogy a megfelelő fordítót (ebben az esetben - csc.exe és vbc.exe) hasonló sorozatát a CIL-utasításokat. Azonban a nyelvek továbbra is eltérhetnek a teljes funkcionalitás szintjét tekintve. Például a .NET-nyelvek valamelyikében előfordulhat, hogy nem tartalmaz kulcsszót az aláírás nélküli adatok megjelenítésére, és a mutatók típusai támogatottak vagy nem támogatottak. Mindezek a lehetséges változatok miatt jó lenne néhány alapvető követelmény, amelyeknek minden .NET támogató nyelvnek válaszolnia kell.
CLS (Common Language Specification - általános előírások programozási nyelvek) csak egy szabályrendszer, amelyet részletesen leírják a minimális és teljes körű funkciók kell feltétlenül támogatja az egyes .NET-fordító generál ilyen programot kódot, amelyet a CLR szolgáltathat, és amelyhez a .NET platformra célzott nyelvek mindegyike egységes módon férhet hozzá. A CLS sok szempontból tekinthető a CTS-ben definiált összes funkció részhalmazának.
Végül a CLS egyfajta szabályrendszer, amelyet a fordító fejlesztőknek be kell tartaniuk, ha azt szeretnék, hogy termékeik zökkenőmentesen működjenek a .NET-ben. Mindegyik szabályok egy egyszerű nevet (például „CLS 6. szabály”), és leírja, hogy a kereset azok számára, akik létre fordítóprogramok és azok, akik (bármilyen módon) kölcsönhatásba lépnek velük. A CLS-ben a legfontosabb az 1. szabály. A CLS-szabályok csak a típus azon részeit érintik, amelyek a gyülekezésen kívül állnak rendelkezésre, amelyben meghatározásra kerültek.
Ebből a szabályból lehet (és azt is) következtetni, hogy a CLS minden más szabálya nem vonatkozik a belső munkaterületek, például a .NET létrehozására használt logikára. A CLS-nek megfelelő típusnak csak a tagdefinícióknak kell megfelelniük (pl. Elnevezési konvenciók, paraméterek és visszatérési típusok). A tag végrehajtási logikáján belül a CLS-szel nem egyeztetett számok és módszerek használhatók, mivel ez nem fog szerepet játszani a külvilágban.
Ez a példa azt szemlélteti, hogy a CLS kétféleképpen működik:
Az egyes fordítók nem elég erősek ahhoz, hogy támogassák a .NET összes lehetőségeit - ez kihívást jelent a .NET-hez hasonló egyéb programozási nyelvek fordítóinak fejlesztői számára.
Ha az osztályokat CLS-kompatibilis eszközökre korlátozza, akkor bármely más programozási nyelven írt kód használhatja ezeket az osztályokat.
Ennek az ötletnek az eleganciája az, hogy a CLS-kompatibilis eszközök alkalmazására vonatkozó korlátozásokat csak a nyilvános és védett osztálytagokra és az állami osztályokra szabják. Belül a megvalósítása magánórákat akkor írj semmilyen kódot nem CLS-kompatibilis, mivel a kód a másik szerelvény (menedzselt kód egység) minden esetben, nem férnek hozzá ezt a részét a kódot.