Blog Dla Młodszych Programistów C#/.NET

Dzisiaj będziemy kontynuować serię pytań, z którymi możesz się spotkać na rozmowie kwalifikacyjnej na stanowisko młodszy programista .NET. Przeanalizujemy kolejnych 10 pytań wraz z odpowiedziami.

100 Pytań (i Odpowiedzi!) z Rozmów Kwalifikacyjnych Dla Młodszych Programistów C#/.NET (Część 3/10)


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).
Autor artykułu:
Kazimierz Szpin
Kazimierz Szpin
Programista C#/.NET. Specjalizuje się w ASP.NET Core, ASP.NET MVC, ASP.NET Web API, Blazor, WPF oraz Windows Forms.
Autor bloga ModestProgrammer.pl
Komentarze (3)
Kuba
KUBA, sobota, 18 grudnia 2021 00:32
Ekstra seria, klarowne wyjaśnienia, tego szukałem na polskiej scenie .NET :)
Kazimierz Szpin
KAZIMIERZ SZPIN, sobota, 18 grudnia 2021 07:17
@KUBA, dzięki i zapraszam do śledzenia bloga, w kolejnych dniach zostaną dodane następne części z tej serii :)
Piotr
PIOTR, sobota, 8 kwietnia 2023 07:28
-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. Nie chodzi tu przypadkiem o deklaracje? W sensie, że nie ma ona sensu przed przekazaniem?
Dodaj komentarz
© Copyright 2024 modestprogrammer.pl. Wszelkie prawa zastrzeżone. Regulamin. Polityka prywatności. Design by Kazimierz Szpin