C Sharp
|
||
| Pojawienie się | lipiec 2000 | |
| Paradygmat | wieloparadygmatowy | |
| Implementacje | C# | |
| Aktualna wersja stabilna | 6.0[1] – 20 czerwca 2015; rok temu | |
| Twórca | Anders Hejlsberg | |
| Platforma sprzętowa | .NET Framework Mono DotGNU | |
| Platforma systemowa | wieloplatformowy | |
C#[2] (C Sharp, dosłownie „cis”, „c z krzyżykiem”) – 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 Framework, Mono lub DotGNU. Wykonanie skompilowanego programu przez system operacyjny bez takiego środowiska nie jest możliwe.
Spis treści
Nazwa[edytuj]
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ł, gdzie symbol krzyżyka/kratki przypomina cztery połączone ze sobą operatory ++. W muzyce dźwięk C♯ jest wyższy niż dźwięk C, może to sugerować, że język jest rozwinięciem C/C++[3].
Symbol ♯ (krzyżyk) jest niedostępny na większości klawiatur, niektórych czcionkach i przeglądarkach internetowych, dlatego zalecane jest używanie symbolu kratki (#), który bardzo przypomina symbol muzyczny. Czasami tam gdzie ma to uzasadnienie np. w materiałach promocyjnych, Microsoft używa nazwy C♯ zamiast C#[4].
Cechy języka[edytuj]
Język C# ma wiele cech wspólnych z językami programowania Object Pascal, Delphi, 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/Object Pascalu 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ą strukturami 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 potrzeby samodzielnego zajmowania się zwalnianiem pamięci po obiektach, które przestają być używane
- właściwości, indeksery: dodatkowe elementy składowe klas
- delegaty, zdarzenia: odpowiedniki i rozwinięcie wskaźników na funkcje z C++
- 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 nieznanej 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
- 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 (CIL).
- bogata biblioteka klas BCL, umożliwiająca rozwijanie aplikacji konsolowych, okienkowych (System.Windows.Forms oraz WPF od .NET Framework 3.0), bazodanowych (ADO.NET), sieciowych (System.Net), w architekturze rozproszonej (WebServices) czy dynamicznych aplikacji internetowych (ASP.NET) oraz dynamiczne treści multimedialne (Silverlight).
- 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ę pomiędzy.
Jeśli komentarz zaczyna się od /// lub /**, to jest to komentarz, w którym umieszcza się dokumentację do kodu.
C# 2.0[edytuj]
Rozszerzenia do języka C# zostały przedstawione przez Microsoft 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("Wciśnięto przycisk"); };
- typy Nullable – to typ prosty, który łączy wartości swojego typu podstawowego z dodatkowym oznaczeniem braku wartości (null). Typy te są tworzone 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.
C# 3.0[edytuj]
- 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" }; - wyrażenia lambda :
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.
C# 4.0[edytuj]
- Obsługa języków dynamicznych dzięki słowu kluczowemu
dynamic. - Obsługa kontra- i kowariancji.
- Opcjonalne słowo kluczowe
refdla wywołań metod obiektów COM. - Parametry opcjonalne i argumenty nazwane.
Jest obsługiwany przez środowisko Visual Studio 2010, a jego kompilator jest częścią platformy .NET Framework 4.0.
C# 5.0[edytuj]
- Słowa kluczowe
awaitiasyncułatwiające programowanie asynchroniczne. - Nowy atrybut
Caller Infoumożliwiający uzyskanie szczegółowych informacji o wywołaniu metod.
Przykładowe programy[edytuj]
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 w następnej linii.
1 using System;
2
3 public class PrzykladowaKlasa
4 {
5 public static void Main()
6 {
7 Console.WriteLine("Podaj swoje imię:");
8
9 string imie = Console.ReadLine();
10 Console.WriteLine("Twoje imię to: " + imie);
11
12 Console.WriteLine("Wciśnij dowolny klawisz by zakończyć program.");
13 Console.ReadKey();
14 }
15 }
Inny program symulujący uniwersalną kostkę do gry, można w nim zobaczyć kilka podstawowych instrukcji języka C#.
1 using System;
2
3 public class Kostka
4 {
5 public static void Main()
6 {
7 int kostka = 0;
8 Random liczba = new Random();
9 string str = "";
10 Console.Clear();
11 while (true)
12 {
13 Console.Write("Iluścienną kostką chcesz grać? ");
14 try { kostka = int.Parse(Console.ReadLine()); }
15 catch
16 {
17 Console.WriteLine("Podano nieprawidłowe dane!");
18 kostka = 0;
19 }
20 if (kostka < 4) { Console.WriteLine("Kostka ma minimum 4 ściany."); }
21 else break;
22 }
23 Console.Clear();
24 while (!str.Equals("q"))
25 {
26 Console.WriteLine("Wylosowana liczba to :" + (liczba.Next(kostka) + 1).ToString() + "\tAby zakończyc wciśnij q + enter");
27 str = Console.ReadLine();
28 }
29 }
30 }
Zobacz też[edytuj]
Inne języki platformy .NET:
Platforma .NET:
Przypisy
- ↑ Announcing .NET Framework 4.6
- ↑ http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf
- ↑ Naomi Hamilton: The A–Z of Programming Languages: C# (ang.). Computerworld, 2008-10-01. [dostęp 2016-10-24].
- ↑ http://www.microsoft.com/presspass/images/gallery/boxshots/web/visual-c-sharp03.jpg
- ↑ An Introduction to New Features in C# 5.0 – The Microsoft MVP Award Program Blog – Site Home – MSDN Blogs
- ↑ What's New for Visual C# in Visual Studio 2012
Linki zewnętrzne[edytuj]
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||