| Ten artykuł wymaga dopracowania zgodnie z zaleceniami edycyjnymi. Należy w nim poprawić: styl, opis elementów języka, kompozycję, formatowanie. Dokładniejsze informacje o tym, co należy poprawić, być może znajdują się na stronie dyskusji tego artykułu w sekcji Dopracować Po wyeliminowaniu wskazanych powyżej niedoskonałości prosimy usunąć szablon {{Dopracować}} z kodu tego artykułu. |
C#[1] (C Sharp, wym. si-szarp, dosłownie "C-krzyżyk", "cis") - obiektowy język programowania zaprojektowany przez zespół pod kierunkiem Andersa Hejlsberga dla firmy Microsoft.
Program napisany w tym języku kompilowany jest do języka Common Intermediate Language (CIL), specjalnego kodu pośredniego wykonywanego w środowisku uruchomieniowym takim jak .NET, Mono lub DotGNU. Wykonanie skompilowanego programu przez system operacyjny bez takiego środowiska nie jest możliwe.
Spis treści |
edytuj Nazwa
Nazwa języka powstała analogicznie jak nazwa C++. Operator ++ w C (w C++ też) oznacza zwiększenie o jeden, więc C++ to więcej niż C. Autorzy C# wykorzystali podobny pomysł.
C# (jeśli przypomnimy, że # oznacza krzyżyk) to po polsku Cis (dźwięk stojący o pół tonu wyżej niż C). Polscy programiści używają jednak angielskiej nazwy "C Sharp".
edytuj Cechy języka
Język C# ma wiele cech wspólnych z językami programowania Delphi, C++ i Java.
- obiektowość z hierarchią o jednym elemencie nadrzędnym: podobnie jak w Javie i w Delphi, kod programu jest zbiorem klas. W C# podobnie tak jak w Javie/Delphi hierarchia dziedziczenia opiera się na istnieniu jednej klasy
object(System.Object), która stanowi element nadrzędny tej hierarchii. W szczególności oznacza to, że również typy proste (int,double, itd.) są obiektami z właściwymi sobie metodami, np.int i=1; string s = i.ToString(); - odśmiecanie pamięci: zarządzaniem pamięcią zajmuje się środowisko uruchomieniowe. Oznacza to, że nie ma konieczności ani potrzeby samodzielnego zajmowania się zwalnianiem pamięci po obiektach, które przestają być używane
- właściwości, indeksery, delegaty, zdarzenia: język C# pozwala definiować wiele różnych elementów składowych klas, nie tylko pola czy metody.
- refleksje i atrybuty klas: w czasie pracy programu istnieje możliwość analizy struktury kodu z poziomu tego kodu. Umożliwia to tworzenie wysoce uniwersalnych mechanizmów operujących na strukturze kodu nie znanej w czasie kompilacji. Mechanizm ten wykorzystywany jest m.in. w bibliotekach ORM, narzędziach do analizy i weryfikacji kodu czy rozszerzeniach AOP. Mechanizm atrybutów został z C# zapożyczony do języka Java w wersji 1.5 (adnotacje), jakkolwiek samo Reflection API istniejące od pierwszego wydania języka stanowiło inspirację dla twórców C#
- typy ogólne (generics - dostępne od wersji .NET 2.0): mechanizm zbliżony swoją ogólnością do szablonów w C++, jednak tu typ ogólny jest przenoszony do modułu binarnego i możliwy jest do wykorzystania bez konieczności posiadania kodu źródłowego (szablony w C++ to w uproszczeniu rozbudowane makrodefinicje)
- dynamiczne tworzenie kodu: biblioteki .NET umożliwiają dynamiczne tworzenie kodu w czasie działania programu i włączanie go do kodu aktualnie wykonywanego. Możliwe jest zarówno dynamiczne tworzenie kodu wykonywalnego ze źródeł C# jak i tworzenie dynamicznych modułów w języku pośrednim (MSIL).
- bogata biblioteka klas BCL, umożliwiająca rozwijanie aplikacji konsolowych, okienkowych (System.Windows.Forms), bazodanowych (ADO.NET), sieciowych (System.Net), w architekturze rozproszonej (WebServices) czy dynamicznych aplikacji internetowych (ASP.NET)
- W C#, podobnie jak w C stosuje się dwa rodzaje komentarzy:
-
- // to komentarz jednoliniowy, czyli wszystkiego, co znajduje się za nim, kompilator nie bierze pod uwagę.
- Komentarz wielowierszowy zaczyna się od /* a kończy */. Kompilator nie bierze pod uwagę tego, co znajduje się pośrodku.
Jeśli komentarz zaczyna się od /// lub /**, to jest to komentarz, w którym umieszcza się dokumentację do kodu. Istnieją zmienne takie jak: string do tekstu i liczb, oraz int do wprowadzania tylko wartości liczbowych. XML.
edytuj Przykładowe programy
Prosty program napisany w języku C#. Po jego skompilowaniu i uruchomieniu wyświetlony zostanie napis "Podaj swoje imie: ". Po pobraniu imienia od użytkownika, zostanie ono wyświetlone pod spodem.
using System; public class PrzykladowaKlasa { public static void Main() { Console.WriteLine("Podaj swoje imie:"); string imie = Console.ReadLine(); Console.WriteLine("Twoje imie to: " + imie); Console.WriteLine("Wcisnij dowolny klawisz by zakonczyc program."); Console.ReadKey(); } }
edytuj C# 2.0
Rozszerzenia wprowadzone przez Microsoft do języka w roku 2005 wraz z prezentacją .NET Framework 2.0 oraz Visual Studio 2005.
Najważniejsze z rozszerzeń to:
- typy generyczne - typy te rozszerzają język C# o polimorfizm parametryczny.
Kopiec zaimplementowany przy pomocy szablonu klasy:
public class Kopiec<T> { private T tablica; //konstruktor public Kopiec(T tablica) {...} //wstawianie nowego elementu do kopca public void Wstaw(T elem) {...} }
- słowo kluczowe
yield.
- typy częściowe - umożliwiają rozbicie klasy, struktury lub interfejsu do wielu plików źródłowych. Klasa częściowa wymaga użycia słowa kluczowego
partial.
- metody anonimowe - pozwalają na tworzenie funkcji „w miejscu”. Funkcje takie umożliwiają związanie kodu funkcji bezpośrednio z instancją delegata. Oznacza to, że te funkcje nie mają nazwy i mogą być wywołane jedynie przez wywołanie delegata.
someButton.Click += delegate { MessageBox.Show("Wcisnieto przycisk"); };
- typy Nullable - to typ prosty, który łączy wartości swojego typu podstawowego z dodatkowym oznaczeniem braku wartości (null). Typy te tworzymy przez połączenie nazwy typu prostego ze znakiem ‘?’ np. int?, float?. Głównym zastosowaniem tych typów jest współpraca z bazami danych. Reprezentują one wartości uzyskane z bazy danych, uwzględniając możliwość nie istnienia danej wartości w bazie.
edytuj Nowości w C# 3.0
- Słowa kluczowe "
select,from,where" pozwalające na dostęp do SQL, XML, kolekcji, i innych (Language integrated query (LINQ)) - Proste inicjowanie obiektów:
Klient k = new Klient(); k.Imie="Jan";staje sięKlient k = new Klient { Imie="Jan" }; - Lambda-wyrażenia :
listOfFoo.Where(delegate(Foo x) { return x.size>10;})staje sięlistOfFoo.Where(x => x.size>10); - Typy domniemane:
var x = "hello";oznacza to samo, costring x = "hello"; - Typy anonimowe:
var x = new { Imie = "Jan" } - Automatycznie generowane właściwości:
public static int Liczba { get; internal set; } - Rozszerzanie typów - dodawanie nowych metod do istniejących klas bez potrzeby ich dziedziczenia.
C# 3.0 przedstawiono na PDC 2005. Jest obsługiwany przez środowisko Visual Studio 2008, a jego kompilator jest częścią platformy .NET Framework 3.5.
edytuj Zobacz też
edytuj Przypisy
edytuj Linki zewnętrzne
- Specyfikacja ECMA-334 C# Language (.pdf) (en)
- Artykuł opisujący nowe mechanizmy w C# 2.0
- C# Online.NET Wiki dotyczące C# (en)
- Strona o programowaniu w C# .NET (Kurs C#.NET on-line)
- Video Tutoriale i FAQ C#.NET
|
|||||||||||||||||||||||||||||
języki wspierane standardowo przez VS: C# · Visual Basic .NET · C++/CLI · J# · JScript .NET
inne języki i środowiska: A# · Boo · F# · IronLisp · IronPython · IronRuby · Nemerle · Phalanger · Windows PowerShell
alternatywne implementacje platformy: Mono · .NET Compact Framework · Silverlight · SSCLI
