C#[1] (C Sharp, 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 Framework, Mono albo DotGNU. Wykonanie skompilowanego programu przez system operacyjny bez takiego środowiska nie jest możliwe.
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" albo "C Hash".
Cechy języka
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: analogicznie jak w Javie, kod programu jest zbiorem klas. W C# analogicznie tak jak w Javie/Object Pascalu hierarchia dziedziczenia ma za podstawę na istnieniu jednej klasy
object (System.Object), która stanowi element nadrzędny tej hierarchii. W szczególności oznacza to, że także 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 oraz rozwinięcie wskaźników na funkcje z C++
- refleksje oraz atrybuty klas: w czasie pracy programu istnieje możliwość analizy struktury kodu z poziomu tego kodu. Umożliwia to wykonywanie 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 oraz weryfikacji kodu czy rozszerzeniach AOP. Mechanizm atrybutów stał się 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 oraz możliwy jest do wykorzystania bez konieczności posiadania kodu źródłowego
- dynamiczne wykonywanie kodu: biblioteki .NET dopuszczają dynamiczne wykonywanie kodu w czasie działania programu oraz włączanie go do kodu aktualnie wykonywanego. Możliwe jest zarówno dynamiczne wykonywanie kodu wykonywalnego ze źródeł C# jak oraz wykonywanie dynamicznych modułów w języku pośrednim (MSIL).
- 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#, analogicznie jak w C stosuje się dwa rodzaje komentarzy:
-
- // to komentarz jednoliniowy, czyli wszystkiego, co istnieje za nim, kompilator nie bierze pod uwagę.
- Komentarz wielowierszowy zaczyna się od /* a kończy */. Kompilator nie bierze pod uwagę tego, co istnieje pomiędzy.
Jeśli komentarz zaczyna się od /// albo /**, to jest to komentarz, w którym umieszcza się dokumentację do kodu.
C# 2.0
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:
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) {...}
}
- typy częściowe - dopuszczają rozbicie klasy, struktury albo interfejsu do wielu plików źródłowych. Klasa częściowa wymaga użycia słowa kluczowego
partial.
- metody anonimowe - pozwalają na wykonywanie funkcji „w miejscu”. Funkcje takie dopuszczają związanie kodu funkcji bezpośrednio z instancją delegata. Oznacza to, że te funkcje nie posiadają nazwy oraz bywają wywołane zaledwie 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 są wykonywane przez połączenie nazwy typu prostego ze znakiem ‘?’ np. int?, float?. Podstawowym 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
- Słowa kluczowe "
select, from, where" pozwalające na dostęp do SQL, XML, kolekcji oraz 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, co string 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
- Obsługa języków dynamicznych dzięki słowu kluczowemu
dynamic.
- Obsługa kontra- oraz kowariancji.
- Opcjonalne słowo kluczowe
ref dla wywołań metod obiektów COM.
- Parametry opcjonalne oraz argumenty nazwane.
Jest obsługiwany przez środowisko Visual Studio 2010, a jego kompilator jest częścią platformy .NET Framework 4.0.
Przykładowe programy
Prosty program napisany w języku C#. Po jego skompilowaniu oraz 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();
}
}
Inny program symulujący uniwersalną kostkę do gry, da się w nim zobaczyć parę podstawowych instrukcji języka C#.
using System;
public class Kostka
{
public static void Main()
{
int kostka=0;
Random liczba = new Random();
string str="";
Console.Clear();
while (true)
{
Console.Write("Iluscienna kostka chcesz grac?: ");
try { kostka = int.Parse(Console.ReadLine()); }
catch
{
Console.WriteLine("Podano nieprawidlowe dane!");
kostka = 0;
}
if (kostka<4) {Console.WriteLine("Kostka ma minimum 4 ściany.");}
else break;
}
Console.Clear();
while (str != "q")
{
Console.WriteLine("Wylosowana liczba to :" + (liczba.Next(kostka) + 1).ToString() + "\tAby zakonczyc wcisnij q + enter");
str = Console.ReadLine();
}
}
}
Sprawdź też
Inne języki platformy .NET:
Platforma .NET:
Przypisy
Linki zewnętrzne
|
Platforma .NET |
|
| języki wspierane standardowo przez VS |
|
|
| inne języki oraz środowiska |
|
|
| alternatywne implementacje platformy |
|
|