Programowanie C# Flashcards
Programowanie w języku C
Zgodnie z postulatem hermetyzacji (enkapsulacji) w dobrze zaprojektowanej klasie pola powinny być definiowane jako składowe prywatne. Jak rozwiązuje się problem publicznego dostępu do takich pól w języku C#?
W języku C# problem publicznego dostępu do prywatnych pól rozwiązany jest za pomocą właściwości (properties). Właściwości są specjalnymi metodami, które zapewniają mechanizmy do odczytu i zapisu wartości prywatnych pól, jednocześnie zachowując hermetyzację. Właściwości mogą oferować wyłącznie odczyt (tylko get), tylko zapis (tylko set) lub oba, i mogą zawierać dodatkową logikę walidacji wewnątrz akcesorów.
Przykład użycia właściwości:
~~~
class ExampleClass
{
private int _myField;
public int MyProperty { get { return _myField; } set { _myField = value; } } } ~~~
Programowanie w języku C
Omów koncepcję delegacji w języku C# i ich zastosowanie.
W C# delegacje to typy referencyjne, które służą jako wskaźniki do metod. Pozwalają na przekazywanie metod jako argumentów innym metodom i są podstawą obsługi zdarzeń w C#. Delegacje umożliwiają tworzenie zdarzeń i obszarów zwrotnych (callbacks) w aplikacjach oraz stanowią fundament dla programowania asynchronicznego.
Przykład użycia delegacji:
~~~
public delegate int Operation(int x, int y);
class Program
{
static int Addition(int a, int b)
{
return a + b;
}
static void Main(string[] args) { Operation op = Addition; int result = op(5, 10); Console.WriteLine(result); } } ~~~
Programowanie w języku C
W języku C# można zdefiniować dwa rodzaje tablic wielowymiarowych. Przedstaw je (na przykładach tablic dwuwymiarowych) i podaj różnicę w zastosowaniu.
Tablice prostokątne: Mają jeden blok pamięci i wszystkie wiersze mają tę samą liczbę kolumn.int[,] rectangularArray = new int[3, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 } };
Tablice nieregularne (szczegóły): Każdy wiersz może mieć inną liczbę kolumn.
~~~
int[][] jaggedArray = new int[3][];
jaggedArray[0] = new int[2] { 1, 2 };
jaggedArray[1] = new int[3] { 3, 4, 5 };
jaggedArray[2] = new int[1] { 6 };
~~~
Różnica w zastosowaniu polega na elastyczności i zużyciu pamięci. Tablice prostokątne są bardziej przewidywalne jeśli chodzi o alokację pamięci, podczas gdy tablice nieregularne oferują większą elastyczność i mogą być bardziej efektywne,
Programowanie w języku C
Jakie typy danych może tworzyć programista w języku C#? Wymień conajmniej 4 i krótko scharakteryzuj.
W C# programista może tworzyć następujące typy danych:
- Klasy (class): Definiują strukturę i zachowanie obiektów.
- Struktury (struct): Lekkie typy wartościowe, które są użyteczne, gdy dane są niewielkie i nie wymagają dziedziczenia.
- Wyliczenia (enum): Zestaw nazwanych stałych całkowitoliczbowych, które pomagają w czytelniejszym kodzie.
- Interfejsy (interface): Definiują zestaw metod bez implementacji, które muszą być zaimplementowane przez klasy.
- Delegacje (delegate): Typy, które reprezentują wskaźniki do metod i mogą być używane do tworzenia zdarzeń i obszarów zwrotnych.
Programowanie w języku C
Omów modyfikatory virtual, override i new języka C#, występujące w metodach definiowanych w klasie bazowej i redefiniowanych w klasie pochodnej.
virtual: Słowo kluczowe virtual w C# pozwala na zdefiniowanie metody w klasie bazowej w taki sposób, że może być ona nadpisana w klasach pochodnych.
~~~
class Base
{
public virtual void ShowMessage() { /* … / }
}
~~~
override: Słowo kluczowe override pozwala na zdefiniowanie nowej implementacji metody w klasie pochodnej, która zastępuje metodę z klasy bazowej.
~~~
class Derived : Base
{
public override void ShowMessage() { / … / }
}
~~~
new: Słowo kluczowe new jest używane, gdy chcemy zdefiniować w klasie pochodnej metodę o takiej samej nazwie, co w klasie bazowej, ale nie chcemy nadpisywać tej z klasy bazowej.
~~~
class Derived : Base
{
public new void ShowMessage() { / … */ }
}
~~~
Użycie new jest nieco kontrowersyjne, ponieważ może prowadzić do niejednoznaczności i błędów w czasie działania programu, jeśli dziedziczenie jest bardziej złożone.