Jason. Cała informatyka w jednym miejscu!

W kolejnej części języka C# przeanalizujemy w których miejscach i sytuacjach możemy mieć do czynienia ze słowem kluczowym "new". "new" w języku C# może dla większości z Was być już doskonale znane, tylko zależy jakie okoliczności macie na myśli. Sprawdzimy to ;).

"NEW" W JĘZYKU C# NIE KOŃCZY SIĘ NA JEDNYM ZASTOSOWANIU!

Przypominacie sobie artykuł ze słowem "this"? To już wiecie jakiego rodzaju artykułu możecie się spodziewać. Tak, wypiszę Wam gdzie dokładnie możecie spotkać w cudzych kodach źródłowych tytułową frazę, tak żebyście się niczemu nie dziwili :D.

TWORZENIE INSTANCJI KLASY

Zacznę od rzeczy najbardziej oczywistej. "new" spotkacie najczęściej podczas tworzenia nowego obiektu na bazie jakiejś klasy. Pamiętacie z pewnością z lekcji o obiektowości:

Point point = new Point(6, 2);

I chyba tyle, co tu dużo tłumaczyć :P?

Tworzenie obiektu w języku C#

Słowo kluczowe "new" spotkasz podczas tworzenia obiektu!

DEFINICJA NOWEJ WERSJI METODY KLASY BAZOWEJ W KLASIE POTOMNEJ

Druga sytuacja u której znajdziecie "new" w języku C#, to jest zdefiniowanie nowej wersji metody klasy bazowej, która będzie obowiązywać w klasie potomnej:

class MyBaseClass
{
	public void DoSomething()
	{
		Console.WriteLine("Wykonuję instrukcje klasy bazowej.");
	}
}

class MyChildClass : MyBaseClass
{
	public new void DoSomething()
	{
		Console.WriteLine("Wykonuję instrukcje klasy potomnej.");
	}
}

Uwaga! To nie to samo, co przesłanianie (nadpisywanie) z użyciem kombinacji słów "virtual" i "override"! To znaczy, istotnie to nadpisze bazową wersję metody, jednak stosując polimorficzne przypisanie zmiennej instancyjnej klasy potomnej do typu klasy bazowej:

MyChildClass mcc = new MyChildClass();
MyBaseClass mbc = mcc;

mcc.DoSomething();	// wersja klasy potomnej
mbc.DoSomething();	// wersja klasy bazowej

zostanie wywołana inna wersja metody, w zależności od typu danych. Klasa bazowa wykona swoją wersję, a klasa potomna swoją. Stosując kombinację słów "virtual" i "override" również definiujemy przesłanianie, tylko powyższe wywołania zadziałają nieco inaczej (chodzi o wiązanie statyczne i dynamiczne). I pamiętajcie! Tutaj też obowiązuje Was całkowite skopiowanie nagłówka metody, a zatem typ zwracanej wartości taki sam, nazwa taka sama, lista parametrów taka sama.

Przesłanianie metody w języku C# bez użycia słowa kluczowego "override"

"new" to także możliwość przesłaniania metody bez użycia słowa kluczowego "override"!

JAWNE ZGŁASZANIE WYJĄTKÓW

To jest de facto "podpunkt b" punktu pierwszego, jednak wolałem to odseparować. "new" w języku C# znajdziecie także obok słowa kluczowego "throw", które odpowiada za jawne zgłaszanie czy też "prowokowanie" wyjątków. Jeśli temat jest Wam znany, to na pewno choć raz widzieliście taki albo podobny zapis:

throw new Exception();

Znacznie rzadszy ekwiwalent powyższej instrukcji prezentuje się tak :):

Exception exception = new Exception();

throw exception;

Dlatego stwierdziłem, że pasuje to również do punktu o tworzeniu obiektów (bo wyjątek jest TAKŻE obiektem!). Kiedy mamy zamiar sprowokować wyjątek w sposób jawny, też musimy go najpierw utworzyć.

Słowo kluczowe "throw" w języku C#

"new" w języku C# ma też związek z jawnym zgłaszaniem wyjątków...

INICJALIZACJA TABLICY

Ostatni podstawowy przypadek to jest inicjalizacja tablicy:

int[] numbers = new int[4] {1, 2, 4, 8};

Kieruję Was do poprzedniego artykułu w sprawie samych tablic, bo one już były.

Tablica w języku C#

...a także z inicjalizacją tablicy!


To są takie cztery najczęstsze występowania słowa kluczowego "new" w języku C#. Już. To wszystko :). Możecie się rozejść :D.

PODOBNE ARTYKUŁY