21) Jakie są modyfikatory dostępu w C#?
W C# mamy 5 modyfikatorów dostępu. Są to public, private, protected, internal oraz protected internal.
Modyfikator public – element oznaczony tym modyfikatorem jest dostępny wszędzie, z każdego miejsca wewnątrz i z zewnątrz klasy.
Modyfikator private – element oznaczony tym modyfikatorem jest dostępny tylko w tej samej klasie, w której został stworzony.
Modyfikator protected – element oznaczony tym modyfikatorem jest dostępny tylko w klasie, w której został utworzony, a także w klasach pochodnych. To znaczy klas, które dziedziczą po klasie, w której został zadeklarowany ten element.
Modyfikator internal – dostępność dla danego elementu tylko w tym samym module.
Modyfikator protected internal – oznacz dostępność dla wszystkich w danym module oraz dla każdej klasy pochodnej. Jest sumą dostępów protected i internal.
private string _pesel;
public string FirstName;
protected string LastName;
protected internal int Age;
internal DateTime DateOfBirth;
22) Jaka jest różnica pomiędzy const, a readonly?
Wartość pola oznaczona jako const, nie może zostać zmieniona w trakcie działania programu. Jest to stała, której wartość zostaje określona w czasie kompilacji. Stosuje się do wartości, które nigdy się nie zmieniają. Na przykład wartość liczby PI. Pole oznaczone modyfikatorem const jest traktowane jako pole statyczne. Z kolei wartość pola oznaczona jako readonly może zostać przypisana zarówno w czasie kompilacji, jak i w trakcie działania programu, ale tylko przy inicjalizacji i w konstruktorze. Również, w przeciwieństwie do const, może być wartością instancyjną, nie tylko statyczną.
private readonly string _name;
public const double PI = 3.14159;
23) Jaki jest domyślny modyfikator dostępu klas?
Domyślnym modyfikatorem dostępu klas w C# jest internal.
class Student
{
}
internal class Student
{
}
24) Jaki jest domyślny modyfikator dostępu dla składowych klasy?
Domyślny modyfikator dostępu dla składowych klasy jest private.
int _age;
private string _pesel;
void DisplayAge()
{
}
private void DisplayPesel()
{
}
25) Czy w C# jest możliwe dziedziczenie z wielu klas?
W C# możemy dziedziczyć tylko po 1 klasie. Nie ma możliwości dziedziczenia po kilku klasach.
public class Student : Person
{
}
26) Czy klasa może implementować wiele interfejsów?
Tak. W przeciwieństwie do dziedziczenia, w C# klasa może implementować wiele interfejsów.
public class Student : IDisposable, ICloneable
{
public object Clone()
{
return null;
}
public void Dispose()
{
}
}
27) Czy w C# można utworzyć metodę, która może przyjmować zmienną liczbę parametrów?
Tak, aby to zrobić, należy użyć słowa kluczowego params.
public class Student
{
private List< int> _marks = new List< int> ();
public void AddMarks(params int[] number)
{
foreach (var item in number)
{
_marks.Add(item);
}
}
}
var student = new Student();
student.AddMarks(1, 2, 3);
student.AddMarks(1, 2, 3, 4, 5, 5, 5, 5, 1);
28) Jaka jest różnica pomiędzy słowem kluczowym ref, a out?
Zarówno parametr oznaczony słowem kluczowym ref, jak i out pozwala nam przekazać wartość do metody za pomocą referencji. Jednak każdy z nich będzie bardziej dopasowany do innej sytuacji. Podstawowe różnice pomiędzy nimi:
-Zmienna oznaczona słowem ref musi być zainicjalizowana przed przekazaniem jej jako parametr.
-Zmienna oznaczona słowem out nie musi (ale może) być zainicjalizowana przed przekazaniem jej jako parametr. Również może być inicjalizacja przed przekazaniem, lecz nie ma to najmniejszego sensu.
-Zmienna oznaczona przez ref nie musi zostać zainicjalizowana w metodzie.
-Zmienna oznaczona przez out musi zostać zainicjalizowana w metodzie.
Podsumowując, zmienna oznaczona przez ref mówi nam, że zmienna została już wcześniej zainicjalizowana i może zostać odczytana lub/i zmieniona w metodzie, a wszystkie zmiany będą widoczne również poza metodą. Zmienna oznaczona przez out mówi nam, że zmienna nie została jeszcze zainicjalizowana, nie ma żadnej wartości. Jej wartość będzie zainicjalizowana wewnątrz metody i zazwyczaj używamy w przypadkach, gdy chcemy, żeby wartość jakiejś zmiennej została zmieniona poza metodą.
public void IncrementRefValue(ref int value)
{
value++;
}
public void IncrementOutValue(out int value)
{
value = 10;
value++;
}
29) Co oznacza słowo kluczowe void?
Takim słowem kluczowym może zostać oznaczona metoda. I mówi nam o tym, że metoda nie zwraca żadnej wartości.
public void Display()
{
}
30) Czym są indeksery?
Indeksery, są to metody, dzięki którym możemy mieć dostęp do obiektu, tak jakby był on tablicą, czy kolekcją elementów.
public class MyList
{
private List< int> _list = new List< int> ();
public int this[int index]
{
get
{
return _list[index];
}
set
{
_list[index] = value;
}
}
}
var myList = new MyList();
myList[0] = 1;
ZAKOŃCZENIE
To wszystkie pytania na dzisiaj. Do kolejnych pytań wrócimy już w kolejnym artykule. Jeżeli taki materiał Ci się spodobał, to koniecznie dołącz do mojej społeczności – darmowe zapisy, gdzie będziesz również miał dostęp do dodatkowych materiałów.
To wszystko na dzisiaj, do zobaczenia w kolejnym artykule.
Poprzedni artykuł - 100 Pytań (i Odpowiedzi!) z Rozmów Kwalifikacyjnych Dla Młodszych Programistów C#/.NET (Część 2/10).
Następny artykuł - 100 Pytań (i Odpowiedzi!) z Rozmów Kwalifikacyjnych Dla Młodszych Programistów C#/.NET (Część 4/10).