Miałem wrażenie, że wszystkie typy wartości dziedziczą po System.ValueType i ponieważ wiem, że Dziesiętny to struktura, która jest również typem wartości, co oznacza, że ​​Decimal musi być typem wartości. Dlaczego więc resharper pokazuje hierarchię typów jako taką:

enter image description here

Czy coś tutaj nie rozumiem?

2
m.edmondson 22 luty 2012, 14:59

3 odpowiedzi

Najlepsza odpowiedź

Jeśli pokażę (w ReSharper 5.1) Dziesiętny w innym trybie widoku (Hierarchia supertypów), widzę, że:

enter image description here

Więc wszystko jest tak, jak można się spodziewać.

2
brgerner 22 luty 2012, 15:21

Decimal nie pochodzi z IFormattable, po prostu implementuje interfejs IFormattable.

Implementacja interfejsu jest czasami nazywana „dziedziczeniem” i wygląda prawie tak samo.

Jestem bardziej zaskoczony, że resharper nie pokazuje reszty interfejsów.
Przejdź do definicji (F12) w VS pokazuje:

 public struct Decimal : 
       IFormattable, IComparable, IConvertible, IDeserializationCallback, 
       IComparable<decimal>, IEquatable<decimal>
6
Henk Holterman 22 luty 2012, 15:03

Nie ma typu, który faktycznie dziedziczy po System.ValueType w tradycyjnym sensie dziedziczenia, jak to wyrażono w kodzie (jest System.Enum, ale na potrzeby tej dyskusji nie materiał). ValueType to specjalny typ, który nie jest przeznaczony do użycia w kodzie; „dziedziczysz” po nim, deklarując, że typem jest struct:

Chociaż ValueType jest niejawną klasą bazową dla typów wartości, ty nie może utworzyć klasy, która dziedziczy bezpośrednio z ValueType. W zamian, poszczególne kompilatory dostarczają słowa kluczowego języka lub konstrukcji (takiej jak struct w C# i Structure…End Structure w Visual Basic) do obsługi tworzenie typów wartości.

Ten typ „dziedziczenia” jest obsługiwany przez kompilator, który ma wiedzę na temat tych „specjalnych” typów (na przykład istnieje również System.Void).

Pokazana hierarchia dziedziczenia odpowiada tradycyjnej koncepcji dziedziczenia, więc nie odzwierciedla relacji między ValueType a Decimal (lub jakimkolwiek innym struct).

1
Jon 22 luty 2012, 15:06