Jakie słowaOto mała tabelka podsumowująca jakie słowa kluczowe mogą być użyte w interfejsach, klasach i strukturach itp..

 

 

KluczoweInterfejsAbstrakcyjna klasaKlasaZamknięta KlasaStruktura
newTak@TakTakTakNie@
privateNieTakTakTakTak
publicNieTakTakTakTak
protectedNieTakTakTakNie@
virtualNieTakTakNie#Tak
overrideNieTakTakTakTak@
abstractNieWymaganyNieNie#Nie
sealedNieNieNieWymaganyNie

 

Poniżej umieściłem objaśnienia co do  pewnych nieścisłości w tabelce.

@Rzeczywiście w interfejsie można użyć słowa kluczowego new ,ale jest to szczególny przypadek.
Nie możemy tworzyć obiektów z interfejsów ,ale możemy użyć słowa kluczowego new, gdy chcemy przysłonić metodę. A metoda przesłoniona pochodzi oczywiście od jeszcze innego interfejsu.


interface ITest 
{
    void Metoda();

}

interface IJaMamSens : ITest 
{
    new void Metoda();
}

Jest to przypadek jeden na milion. Nie ma on nawet sensu.

@Struktura może używać słowa kluczowego new jednak nie tworzy ona w wtedy referencji jak klasa .W tym wypadku słowo kluczowe new wywołuje tylko konstruktor struktury. Struktura może być stworzona bez słowa kluczowego new, ponieważ jest ona typem wartościowy.

@Struktura jest domyślnie zamknięta “sealed” więc modyfikator dostępu protected nie może być użyty.

@ Struktura dziedziczy na poziomie frameworku po klasie System.Object, czyli metody takie jak “ToString()” mogą być nadpisane.


struct StrukturaTest 
{
    public override string ToString()
    {
        return "dsds";
    }

    public override bool Equals(object obj)
    {
        return base.Equals(obj);
    }
    public override int GetHashCode()
    {
        return base.GetHashCode();
    }
}
 

# Zamknięta klasa nie może stać się klasą bazową więc słowa kluczowe virtual i abstract nie mają tutaj żadnego sensu.