C♯

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 C Sharp
Nazwa języka C Sharp
Zapis dźwięku Cis
Zapis dźwięku Cis

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żykanotacji 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++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:
  1. // to komentarz jednoliniowy, czyli wszystkiego, co znajduje się za nim, kompilator nie bierze pod uwagę.
  2. 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, 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.

[edytuj] Zobacz też

[edytuj] Przypisy

  1. Microsoft C# FAQ
  2. Specyfikacja EMCA-334 C# Language, sekcja 6, Acronyms and abbreviations

[edytuj] Linki zewnętrzne


system wymiany linków SEO Tools wymiana linkami SEO Tools tanie kredyty gotówkowe kreatyna Plaza 3 star hotel Los Angeles krynica noclegi Sejm Tyk