Krzyżówka języków

C# to nowy język programowania, zaprezentowany przez Microsoft. Składnia przypomina C/C++, wprowadzono wiele elementów C# w celu skrócenia czasu pisania aplikacji.

C# to nowy język programowania, zaprezentowany przez Microsoft. Składnia przypomina C/C++, wprowadzono wiele elementów C# w celu skrócenia czasu pisania aplikacji.

Język C#, określany też jako C Sharp, będzie miał wbudowane automatyczne zarządzanie pamięcią z relokacją obiektów i usuwaniem takich elementów, do których nie ma odwołania w programie. Zwalnia to programistę z konieczności samodzielnego usuwania obiektów i eliminuje przecieki (straty) pamięci. Równocześnie pozwala optymalizatorowi decydować, które z obiektów powinny znajdować się w pamięci operacyjnej, a które mogą być przeniesione do pliku wymiany. Warto podkreślić, że C# pozwoli na skorzystanie ze "standardowych" wskaźników do pamięci. Jednak kod, który z nich korzysta, musi być specjalnie oznaczony. Obiekt ma tymczasowy stały adres w pamięci, któremu można przypisać "niebezpieczny" wskaźnik.

Wbudowane typy proste w C# odpowiadają typom C/C++. Ciekawostką może być to, że "długa" liczba całkowita ma 64 bity. Łańcuchy znaków są przechowywane w standardzie Unicode. Typ prosty w C#, w odróżnieniu od C++, jest obiektem. Ma metodę odczytu wartości itp. Co ciekawe, można zamknąć typ prosty w zmiennej obiektowej. W ten sposób może być jawnie przekazywana zamiast wartości referencja do dowolnej zmiennej. Równocześnie pozwala to, by programista tak samo traktował typy proste i własne obiekty.

C#, oprócz tablic o kształcie regularnym, umożliwia definiowanie "tablicy tablic", gdzie np. każdy wiersz ma inną liczbę elementów. W C/C++ zwykle była tworzona tablica wskaźników do tablic. C# pozwala zastosować bardziej efektowne rozwiązanie.

Mechanizm obsługi błędów jest oparty (jak w C++) na schemacie try/catch. Także większość standardowych operacji strukturalnych (pętle, instrukcje warunkowe itp.) w C# ma taką samą postać, jak w C/C++. Ciekawym elementem jest możliwość włączania i wyłączania sprawdzania przekroczenia zakresu zmiennych numerycznych w konkretnym miejscu w programie. W innych kompilatorach (C, Java, Delphi, Visual Basic itp.) zwykle jest to ustalane na poziomie projektu.

W C/C++ dużą trudność sprawiały wskaźniki do funkcji. Tak naprawdę programista musiał bardzo uważnie sprawdzać, czy poprawnie zadeklarował wskaźnik do funkcji (a zwłaszcza określił parametry) i czy deklaracja funkcji, która taki wskaźnik inicjuje, na pewno odpowiada deklaracji wskaźnika. Kompilator niemal w ogóle nie sprawdzał poprawności takiego kodu. W C# pojawił się nowy element - "delegat" określający postać funkcji, która może być wywoływana przez wskazanie. Kompilator sprawdza, czy dana funkcja ma odpowiednią postać.

Nowy język będzie zawierał już w składni mechanizmy pozwalające synchronizować różne wątki działania programu. Jednak nie jest określona dokładna metoda synchronizacji czy komunikacji między wątkami.

W C# nie ma konieczności tworzenia deklaracji klas czy funkcji (oczywiście zmienne lokalne/globalne muszą być zadeklarowane). Można natomiast określić interfejs, który zdefiniuje, jakie metody dana klasa będzie udostępniać (podobnie jak w przypadku implementowania konkretnego interfejsu COM).

Nie ma w ogóle plików nagłówkowych. Podobnie jak w Javie czy w Delphi, biblioteki są pogrupowane w pakiety i na początku pliku z kodem źródłowym należy określić, z jakich pakietów dany kod korzysta. Do każdej klasy czy metody można odwoływać się albo przez pełną nazwę (zawierającą nazwę pakietu), nazwę skróconą, albo też określić alias dla często wykorzystywanych metod. Warto dodać, że pakiet nie musi być napisany w C#. Nie określono jeszcze, jak ma wyglądać współpraca pomiędzy C# a obiektami napisanymi w innym języku.

Dużo nowych elementów i rozszerzeń wprowadzono w definicji klas C#. Pojawił się nowy typ enkapsulacji metod czy atrybutów klasy. Można określić, że dany element będzie dostępny tylko i wyłącznie z tego projektu, w którym dana klasa jest implementowana.

C# pozwala na wielokrotne dziedziczenie. Jednak w odróżnieniu od C++, jasno określone jest zachowanie kompilatora, w przypadku gdy dwie klasy bazowe mają zaimplementowaną tę samą metodę - klasa pochodna musi jawnie określić, którą z funkcji wywoła.

Rozwiązano też problem wielu wersji jednej klasy, gdy w kolejnej implementacji pojawiają się nowe metody. Domyślnie, klasa pochodna przysłania nowe funkcje implementowane w klasie bazowej. W ten sposób zachowana jest pewnego rodzaju "binarna" kompatybilność z nowymi wersjami składników - jeżeli metoda A pojawiła się w klasie bazowej, ale istniała już w klasie pochodnej, to nawet gdy zostanie wymieniony komponent bazowy, metoda A w klasie pochodnej nadal będzie wywoływana przez klientów.

W C# przewidziano możliwość tworzenia właściwości i indeksacji w klasie. Właściwość (podobnie jak w Visual Basic) to w zasadzie para metod do przypisania i odczytania wartości. Z poziomu kodu zewnętrznego (wykorzystującego daną klasę) właściwość wygląda tak samo, jak zmienna w danej klasie. Indeks to specjalny mechanizm, który pozwala tworzyć "inteligentne" tablice. Klasa implementuje metody dostępu do n-tego elementu, a odwołanie do niego ma taką samą postać, jakby klasa była tablicą!

Ciekawą cechą C# jest możliwość definiowania własnych atrybutów elementu (klasy, metody czy wręcz zmiennej). W ten sposób można np. rozszerzyć definicję języka o składnię określającą dokumentację danego elementu.

Struktury w C++ były spuścizną z C; w zasadzie nie wiadomo było co z nimi robić. Na przykład część kompilatorów traktowała je niemal jak klasy. W specyfikacji C# jasno określono rolę struktur.

Struktura ma niemal te same możliwości co klasa (enkapsulacja metod, tworzenie właściwości itp.), ale nie może dziedziczyć. Wewnętrznie nie jest przechowywana jak obiekt. Działa znacznie szybciej niż klasa (np. 100-elementowa tablica zawie- rająca struktury "punkt" to po prostu pewien obszar w pamięci. Analogicznie 100-elementowa tablica obiektów klasy "punkt" powoduje powstanie 100 różnych obiektów w pamięci). Metody, właściwości itp. są niemal zawsze przekształcane do postaci wstawek w kodzie (inline).

W dużej grupie

C# to nie tylko język, ale także zbiór bibliotek, pozwalających wykonywać większość operacji na zapowiedzianej przed dwoma tygodniami platformie .NET Microsoftu. Na pewno będzie tam zawarta obsługa XML, połączenie z obiektami COM czy mechanizmy komunikacji z innymi aplikacjami. Planowane są wręcz gotowe interfejsy dostępu do danych konkretnej aplikacji.

Wersja beta kompilatora C# ma być dostępna w tym roku. W rozwój C# zaangażowało się ponad 25 firm, w tym: Apex Software, ProtoView, Seagate Software, Sheridan Software Systems, Stingray, VideoSoft, Andersen Consulting, NuMega (Compuware) i Rational. C# zgłoszono do zatwierdzenia przez European Computer Manufacturers Association (ECMA), co może pozwolić na standaryzację języka przez International Standards Organization (ISO). Ma on też wchodzić w skład pakietu Visual Studio 7.0.

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200