Какие типы классов не могут быть унаследованы в .NET? - PullRequest
1 голос
/ 01 марта 2012

Какой тип класса не может быть унаследован?Почему и как это можно сделать?Пожалуйста, объясните на примерах.

Также Каковы возможные способы предотвращения создания класса?

Ответы [ 4 ]

6 голосов
/ 01 марта 2012
Класс

, помеченный ключевыми словами sealed (C #) или NotInheritable (VB.NET), не может наследоваться от.Это делается при определении классов.Наиболее часто используемый закрытый класс - System.String.

5 голосов
/ 01 марта 2012

Очевидно, что запечатанное ключевое слово может помешать любому производному от типа. Но вы также можете контролировать, кто может быть производным от вашего класса, изменяя видимость ваших конструкторов. Если вы объявляете все конструкторы внутренними (включая стандартные), то только другие классы в той же сборке смогут получать. Если вы объявите их закрытыми (опять же, в том числе по умолчанию), то только вложенный класс внутри вашего класса сможет это сделать.

Существуют некоторые особые случаи, такие как System.Delegate и System.ValueType , которые имеют общедоступные конструкторы, но вы не можете получить их из них.

2 голосов
/ 01 марта 2012

Классы с загерметизированным или статическим ключевым словом, значения типа не могут использоваться практически во всех ситуациях.Также вы можете искать похожие вопросы по SW, например this

1 голос
/ 01 марта 2012

Из MSDN Абстрактные и запечатанные классы и члены класса (Руководство по программированию в C #) :

public sealed class D
{
    // Class members here.
}

Запечатанный класс нельзя использовать в качестве базового класса. По этой причине он также не может быть абстрактным классом. Запечатанные классы предотвращают деривацию. Поскольку их никогда нельзя использовать в качестве базового класса, некоторые оптимизации во время выполнения могут немного ускорить вызов запечатанных членов класса.

Это из классов MSDN MustInherit и NotInheritable

NotInheritable Class A
End Class

Class B
    ' Error, a class cannot derive from a NotInheritable class.
    Inherits A
End Class

NotInheritable класс - это класс, из которого нельзя извлечь другой класс. NotInheritable классы в основном используются для предотвращения непреднамеренного деривации.

В этом примере класс B содержит ошибку, так как он пытается наследовать класс NotInheritable A. Класс нельзя пометить как MustInherit, так и NotInheritable.

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