Почему System.Decimal иерархии наследования - PullRequest
2 голосов
/ 22 февраля 2012

У меня сложилось впечатление, что все типы значений наследуются от System.ValueType , и потому что я знаю, что Decimal является struct который также является типом значения, он говорит о том, что Decimal, следовательно, должен быть типом значения . Итак, почему resharper показывает иерархию типов как таковую:

enter image description here

или я что-то здесь неправильно понимаю?

Ответы [ 3 ]

6 голосов
/ 22 февраля 2012

Десятичное число не выводит из IFormattable, оно просто реализует интерфейс IFormattable.

Реализация интерфейса иногда называется «наследованием» и выглядит почти так же.

Я более удивлен, что resharper не показывает остальные интерфейсы.
Перейти к определению (F12) в VS показывает:

 public struct Decimal : 
       IFormattable, IComparable, IConvertible, IDeserializationCallback, 
       IComparable<decimal>, IEquatable<decimal>
2 голосов
/ 22 февраля 2012

Если я показываю (в ReSharper 5.1) Десятичное число в другом режиме просмотра ( Иерархия супертипов ), я вижу, что:

enter image description here

Так что все как и следовало ожидать.

1 голос
/ 22 февраля 2012

Не существует типа, который на самом деле наследует от System.ValueType в традиционном смысле наследования, как это выражено в коде (существует System.Enum, но для целей этого обсуждения это не имеет значения) , ValueType - это специальный тип, не предназначенный для использования в коде; вы «наследуете» его, заявляя, что тип является struct:

Хотя ValueType является неявным базовым классом для типов значений, вы не может создать класс, который наследуется от ValueType напрямую. Вместо, отдельные компиляторы предоставляют ключевое слово языка или конструкцию (например, struct в C # и Structure…End Structure в Visual Basic) для поддержки создание типов значений.

Этот тип «наследования» обрабатывается компилятором, который знает эти «специальные» типы (например, есть также System.Void).

Показанная вами иерархия наследования соответствует традиционной концепции наследования, поэтому она не отражает отношения между ValueType и Decimal (или любым другим struct).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...