Opis:
Są dwie klasy: A i B, I A dziedziczy klasę B, a B jest klasą nadrzędną
Ustawiłem właściwości TestAttribute odpowiednio w klasie A i B...
Następnie weźmy cechy obiektu, a kod wygląda następująco:
Zauważyłem, że liczba wyników wynosi 1, a atrybut to zestaw atrybutów A, a nie zestaw atrybutów B, nie mówiąc już o połączeniu – dlaczego tak jest???
[Help("BaseClass")] publicclass Base{} publicclass Wyprowadzać : Base{} Są tu cztery możliwe kombinacje:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false ] [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = fałsz ] [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true] [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true] Pierwszy przypadek:
Jeśli zapytamy klasę Derive (zobaczymy później, jak zapytać o właściwości klasy w czasie działania), okaże się, że funkcja Pomoc nie istnieje, ponieważ odziedziczona właściwość jest ustawiona na false.
Drugi przypadek:
Tak samo jak w pierwszym przypadku, ponieważ dziedziczone jest też ustawione na fałsz.
Trzecia sytuacja:
Aby wyjaśnić trzeci i czwarty przypadek, najpierw dodajmy trochę kodu do klasy pochodnej:
[Help("BaseClass")] publicclass Base{}[help("DeriveClass")] publicclass Derive : Base{} Teraz zapytajmy funkcję Pomocy, możemy uzyskać tylko właściwości klasy pochodnej, ponieważ dziedziczone jest ustawione na prawdę, ale AllowMultiple jest ustawione na false. W związku z tym funkcja Help klasy bazowej jest nadpisywana przez funkcję pomocy klasy pochodnej.
Czwarta sytuacja:
Tutaj okazuje się, że klasa pochodna ma zarówno funkcję Pomoc, jak i własną Pomoc, ponieważ Dowolność Wielokrotnego jest ustawiona na prawdę.
|