2016-10-27 8 views
1

В Java,C# приведение к базовому типу всегда разрешено

«Up-литья литье в надтип, а понижающее приведение является приведением к подтипу. Supercasting всегда разрешен, но subcasting включает в себя проверку на типа и может вызывать исключение ClassCastException ».

(What is the difference between up-casting and down-casting with respect to class variable)

Есть также приведение к базовому типу всегда допускается в C#?

+4

Да, абсолютно. –

ответ

1

Да, это разрешено, так как подкласс является спецификацией класса предков.

Пример:

Рассмотрим случай, когда мы имеем class называется Bird, другой под названием Sparrow и третий один Eagle. Sparrow и Eagle унаследованы от Bird. Sparrows отличается от Eagles сильно, но это Bird s. Итак, если вы хотите иметь Collection из Bird с для какой-либо причины, то вы можете иметь Eagle и Sparrow объектов в этом Collection в то же время, так как они все еще Birds, если бы только конкретныхBird с.

1

принципы ООП утверждают, что вы можете всегда вентиляционный; Однако, в отличие от Java с очень ограниченным числом примитивных классов, .Net реализации позволяет объявить struct типов, некоторые из них являются странными контрпримеров с боксом:

TypedReference reference = new TypedReference(); 

// Compile time error here! Even if Object is the base type for all types 
Object o = (Object)reference; 

Технически , TypedReference является Object:

Object 
    ValueType 
    TypedReference 

Вы можете легко проверить это:

Console.Write(typeof(TypedReference).BaseType.BaseType == typeof(Object) 
    ? "TypedReference derived from Object via ValueType" 
    : "Very strange"); 

но для того, чтобы быть представлен в виде Object экземпляра (с помощью броска) он должен быть боксировал, который не может быть сделано.

Смежные вопросы