Programowanie C# Flashcards

1
Q

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#?

A

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; }
} } ~~~
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Programowanie w języku C

Omów koncepcję delegacji w języku C# i ich zastosowanie.

A

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);
} } ~~~
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

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.

A

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,

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Programowanie w języku C

Jakie typy danych może tworzyć programista w języku C#? Wymień conajmniej 4 i krótko scharakteryzuj.

A

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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

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.

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly