C Sharp
C# (C Sharp, C♯, wym. si-szarp, dosłownie C-krzyżyk) jest obiektowym językiem programowania zaprojektowanym 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 .NET, Mono lub DotGNU.
Do uruchomienia programu napisanego w języku C# w systemie operacyjnym Microsoft Windows wymagane jest środowisko uruchomieniowe zwane .NET Framework dostępne za darmo na stronie Microsoftu.
Język C# ma wiele cech wspólnych z językami programowania C++ i Java.
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ł.
Znak stojący za C pochodzi od znaku sharp - ♯, czyli krzyżyka w notacji muzycznej. Ponieważ w wielu stronach kodowych i czcionkach krzyżyka nie ma (trudno wprowadza się też go z klawiatury)[1], w jego miejsce stosuje się znak kratki (hash, #)[2].
C# (jeśli przymiemy, ż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
- obiektowość z hierarchią o jednym elemencie nadrzędnym: podobnie jak w Javie, kod programu jest zbiorem klas. W C# podobnie tak jak w Javie (java.lang.Object) 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 (metaprogramowanie): 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 Javy w wersji 1.5.
- 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)
[edytuj] Przykładowe programy
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 w postaci kodu XML.
Prosty program napisany w języku C#. Po jego skompilowaniu i uruchomieniu zobaczymy napis „Hello world!”.
using System; public class PrzykladowaKlasa { public static void Main() { Console.WriteLine("Hello world!"); } }
Kolejny przykładowy program demonstruje technikę programowania interfejsu użytkownika. Po jego skompilowaniu i uruchomieniu system operacyjny utworzy okienko aplikacji.
using System; using System.Windows.Forms; public class PrzykladoweOkno : Form { public static void Main() { Application.Run( new PrzykladoweOkno() ); } }
Przykładowe algorytmy sortowania zaimplementowane w C# znajdują się w tematach:
[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 Heap<T> { private T[] array; //konstruktor public Heap(T[] array) {...} //wstawianie nowego elementu do kopca public void Insert(T elem) {...} }
- iteratory klas - podobnie do generatorów w Pythonie używają słowa kluczowego "yield".
public IEnumerator<T> GetEnumerator() { for (int i = 1; i <= heapSize; i++) { yield return array[i]; } }
- typy częściowe - umożliwiają rozbicie klasy, struktury lub interfejsu do wielu plików źródłowych. Klasa częsciowa wymaga użycia słowa kluczowego "partial".
- metody anonimowe - pozwalają na tworzenie funkcji „w miejscu”. Funkcje takie umożliwiają na 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)) - Inicjalizatory 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" } - Rozszerzanie typów - dodawanie nowych metod do istniejących klas bez potrzeby ich dziedziczenia.
C# 3.0 przedstawiono na PDC 2005, wersja Preview jest dostępna na stronach MSDN.
[edytuj] Zobacz też
[edytuj] Przypisy
- ↑ Microsoft C# FAQ
- ↑ Specyfikacja EMCA-334 C# Language, sekcja 6, Acronyms and abbreviations
[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
ABAP • Ada • AWK • Asembler • C • C++ • C# • COBOL • Common Lisp • D • Forth • Fortran • GAUSS • Icon • Java • JavaScript • Lisp • Modula 2 • Ocaml • Oberon • Object Pascal • Objective-C • Pascal • Perl • PHP • PL/SQL • Python • REXX • Ruby • SAS 4GL • sh • Smalltalk • Snobol • SQL • Visual Basic • VB.NET
Akademickie
Comal • Eiffel • Haskell • Logo • MCPL • ML • Nemerle • Prolog • Scheme
Historyczne
ALGOL • APL • BASIC • Clipper • JAS • MUMPS • PLAN • PL/I • PL/M • SAKO * SAS (asembler) • Simula
Ezoteryczne
INTERCAL • Brainfuck • BeFunge • Unlambda • Malbolge • Whitespace • False • HQ9+ • Shakespeare • Whirl • Ook
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