C♯
Z Wikipedii
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 znajdziesz na stronie dyskusji tego artykułu. Po naprawieniu wszystkich błędów można usunąć tę wiadomość. |
C# (C Sharp, C♯, 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ł.
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 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 C++ i Java.
- 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 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() { string imie; Console.WriteLine("Podaj swoje imie:"); imie=Console.ReadLine(); Console.WriteLine("Twoje imie to: " + imie); 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ę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 • F# • Forth • Fortran • GAUSS • Icon • Java • JavaScript • Lisp • Lustre• 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 • XUL
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