Windows с наследование класса

Наследование (Руководство по программированию на C#) Inheritance (C# Programming Guide)

Наследование, вместе с инкапсуляцией и полиморфизмом, является одной из трех основных характеристик объектно-ориентированного программирования. Inheritance, together with encapsulation and polymorphism, is one of the three primary characteristics of object-oriented programming. Наследование позволяет создавать новые классы, которые повторно используют, расширяют и изменяют поведение, определенное в других классах. Inheritance enables you to create new classes that reuse, extend, and modify the behavior defined in other classes. Класс, члены которого наследуются, называется базовым классом, а класс, который наследует эти члены, называется производным классом. The class whose members are inherited is called the base class, and the class that inherits those members is called the derived class. Производный класс может иметь только один прямой базовый класс. A derived class can have only one direct base class. Однако наследование является транзитивным. However, inheritance is transitive. Если ClassC является производным от ClassB , а ClassB — от ClassA , ClassC наследует члены, объявленные в ClassB и ClassA . If ClassC is derived from ClassB , and ClassB is derived from ClassA , ClassC inherits the members declared in ClassB and ClassA .

Структуры не поддерживают наследование, но могут реализовывать интерфейсы. Structs do not support inheritance, but they can implement interfaces. Дополнительные сведения см. в разделе Интерфейсы. For more information, see Interfaces.

Концептуально производный класс является специализацией базового класса. Conceptually, a derived class is a specialization of the base class. Например, при наличии базового класса Animal возможно наличие одного производного класса, который называется Mammal , и еще одного производного класса, который называется Reptile . For example, if you have a base class Animal , you might have one derived class that is named Mammal and another derived class that is named Reptile . Mammal является Animal и Reptile является Animal , но каждый производный класс представляет разные специализации базового класса. A Mammal is an Animal , and a Reptile is an Animal , but each derived class represents different specializations of the base class.

Объявления интерфейса могут определять реализацию по умолчанию для членов. Interface declarations may define a default implementation for its members. Эти реализации наследуются производными интерфейсами и классами, реализующими эти интерфейсы. These implementations are inherited by derived interfaces, and by classes that implement those interfaces. Дополнительные сведения о методах интерфейса по умолчанию см. в разделе справочника по языку, посвященном интерфейсам. For more information on default interface methods, see the article on interfaces in the language reference section.

При определении класса для наследования от другого класса производный класс явно получает все члены базового класса за исключением конструкторов и методов завершения. When you define a class to derive from another class, the derived class implicitly gains all the members of the base class, except for its constructors and finalizers. Производный класс повторно использует код в базовом классе без необходимости его повторной реализации. The derived class reuses the code in the base class without having to reimplement it. В производный класс можно добавить дополнительные члены. You can add more members in the derived class. Производный класс расширяет функциональность базового класса. The derived class extends the functionality of the base class.

На следующем рисунке показан класс WorkItem , представляющий рабочий элемент в бизнес-процессе. The following illustration shows a class WorkItem that represents an item of work in some business process. Как и другие классы, он является производным от System.Object и наследует все его методы. Like all classes, it derives from System.Object and inherits all its methods. В WorkItem имеется пять собственных членов. WorkItem adds five members of its own. К ним относится конструктор, так как конструкторы не наследуются. These members include a constructor, because constructors aren’t inherited. Класс ChangeRequest наследует от WorkItem и представляет конкретный вид рабочего элемента. Class ChangeRequest inherits from WorkItem and represents a particular kind of work item. ChangeRequest добавляет еще два члена к членам, унаследованным от WorkItem и Object. ChangeRequest adds two more members to the members that it inherits from WorkItem and from Object. Он должен добавить собственный конструктор, и он также добавляет originalItemID . It must add its own constructor, and it also adds originalItemID . Свойство originalItemID позволяет ChangeRequest связать экземпляр с исходным объектом WorkItem , к которому применен запрос на изменение. Property originalItemID enables the ChangeRequest instance to be associated with the original WorkItem to which the change request applies.

Читайте также:  Windows не удается открыть диск

В следующем примере показано, как выражаются в C# отношения между классами, продемонстрированные на предыдущем рисунке. The following example shows how the class relationships demonstrated in the previous illustration are expressed in C#. В примере также показано, как WorkItem переопределяет виртуальный метод Object.ToString и как класс ChangeRequest наследует WorkItem реализацию метода. The example also shows how WorkItem overrides the virtual method Object.ToString, and how the ChangeRequest class inherits the WorkItem implementation of the method. В первом блоке определяются классы: The first block defines the classes:

В следующем блоке показано, как использовать базовый и производный классы: This next block shows how to use the base and derived classes:

Абстрактные и виртуальные методы Abstract and virtual methods

Когда базовый класс объявляет метод как virtual , производный класс может override метод с помощью своей собственной реализации. When a base class declares a method as virtual , a derived class can override the method with its own implementation. Если базовый класс объявляет член как abstract , этот метод должен быть переопределен в любом неабстрактном классе, который прямо наследует от этого класса. If a base class declares a member as abstract , that method must be overridden in any non-abstract class that directly inherits from that class. Если производный класс сам является абстрактным, то он наследует абстрактные члены, не реализуя их. If a derived class is itself abstract, it inherits abstract members without implementing them. Абстрактные и виртуальные члены являются основой для полиморфизма, который является второй основной характеристикой объектно-ориентированного программирования. Abstract and virtual members are the basis for polymorphism, which is the second primary characteristic of object-oriented programming. Дополнительные сведения см. в разделе Полиморфизм. For more information, see Polymorphism.

Абстрактные базовые классы Abstract base classes

Можно объявить класс как абстрактный, если необходимо предотвратить прямое создание экземпляров с помощью оператора new. You can declare a class as abstract if you want to prevent direct instantiation by using the new operator. Абстрактный класс можно использовать, только если новый класс является производным от него. An abstract class can be used only if a new class is derived from it. Абстрактный класс может содержать один или несколько сигнатур методов, которые сами объявлены в качестве абстрактных. An abstract class can contain one or more method signatures that themselves are declared as abstract. Эти сигнатуры задают параметры и возвращают значение, но не имеют реализации (тела метода). These signatures specify the parameters and return value but have no implementation (method body). Абстрактному классу необязательно содержать абстрактные члены; однако если класс все же содержит абстрактный член, то сам класс должен быть объявлен в качестве абстрактного. An abstract class doesn’t have to contain abstract members; however, if a class does contain an abstract member, the class itself must be declared as abstract. Производные классы, которые сами не являются абстрактными, должны предоставить реализацию для любых абстрактных методов из абстрактного базового класса. Derived classes that aren’t abstract themselves must provide the implementation for any abstract methods from an abstract base class. Дополнительные сведения см. в статье Абстрактные и запечатанные классы и члены классов. For more information, see Abstract and Sealed Classes and Class Members.

Интерфейсы Interfaces

Интерфейс — это ссылочный тип, определяющий набор членов. An interface is a reference type that defines a set of members. Этот набор членов должны реализовать все классы и структуры, реализующие интерфейс. All classes and structs that implement that interface must implement that set of members. Интерфейс может определять реализацию по умолчанию для любого из этих членов или для них всех. An interface may define a default implementation for any or all of these members. В классе может быть реализовано несколько интерфейсов, хотя производным он может быть только от одного прямого базового класса. A class can implement multiple interfaces even though it can derive from only a single direct base class.

Читайте также:  Tar xvf in linux

Интерфейсы используются для определения конкретных возможностей для классов, которые не обязательно имеют отношения тождественности. Interfaces are used to define specific capabilities for classes that don’t necessarily have an «is a» relationship. Например, интерфейс System.IEquatable может быть реализован любым классом или структурой для определения эквивалентности двух объектов типа (однако тип определяет эквивалентность). For example, the System.IEquatable interface can be implemented by any class or struct to determine whether two objects of the type are equivalent (however the type defines equivalence). IEquatable не подразумевает тот же вид отношений тождественности, который существует между базовым и производным классами (например, Mammal является Animal ). IEquatable doesn’t imply the same kind of «is a» relationship that exists between a base class and a derived class (for example, a Mammal is an Animal ). Дополнительные сведения см. в разделе Интерфейсы. For more information, see Interfaces.

Предотвращение дальнейшего наследования Preventing further derivation

Класс может предотвратить наследование от других классов или наследование от любых его членов, объявив себя или члены как sealed . A class can prevent other classes from inheriting from it, or from any of its members, by declaring itself or the member as sealed . Дополнительные сведения см. в статье Абстрактные и запечатанные классы и члены классов. For more information, see Abstract and Sealed Classes and Class Members.

Скрытие производного класса членов базового класса Derived class hiding of base class members

Производный класс может скрывать члены базового класса путем объявления членов с тем же именем и сигнатурой. A derived class can hide base class members by declaring members with the same name and signature. Модификатор new может использоваться, чтобы явно указать, что член не должен быть переопределением базового члена. The new modifier can be used to explicitly indicate that the member isn’t intended to be an override of the base member. Использовать new необязательно, но если new не используется, будет создано предупреждение компилятора. The use of new isn’t required, but a compiler warning will be generated if new isn’t used. Дополнительные сведения см. в разделах Управление версиями с помощью ключевых слов Override и New и Использование ключевых слов Override и New. For more information, see Versioning with the Override and New Keywords and Knowing When to Use Override and New Keywords.

Практическое руководство. Наследование форм Windows Forms How to: Inherit Windows Forms

Создание новых форм Windows Forms путем наследования базовых форм является удобным способом для дублирования уже созданного, минуя процесс повторного создания формы с нуля каждый раз, когда она необходима. Creating new Windows Forms by inheriting from base forms is a handy way to duplicate your best efforts without going through the process of entirely recreating a form every time you require it.

Дополнительные сведения о наследовании форм во время разработки с помощью диалогового окна Выбор компонентов для наследования и как визуально различать уровни безопасности производных элементов управления см. в разделе Практическое руководство. Наследование форм с помощью диалогового окна выбора наследования. For more information about inheriting forms at design time using the Inheritance Picker dialog box and how to visually distinguish between security levels of inherited controls, see How to: Inherit Forms Using the Inheritance Picker Dialog Box.

Для наследования из формы файл или пространство имен, содержащие эту форму, должны быть встроены в исполняемый файл или библиотеку DLL. In order to inherit from a form, the file or namespace containing that form must have been built into an executable file or DLL. Для сборки проекта выберите в меню Сборка пункт Собрать. To build the project, choose Build from the Build menu. Кроме того необходимо добавить ссылку на пространство имен к классу, наследующему форму. Also, a reference to the namespace must be added to the class inheriting the form.

Наследовать форму программным способом Inherit a form programmatically

В классе добавьте ссылку на пространство имен, содержащее форму, которую вы хотите наследовать. In your class, add a reference to the namespace containing the form you wish to inherit from.

Читайте также:  Установка геймпада xbox 360 для windows

В определении класса добавьте ссылку на форму для наследования. In the class definition, add a reference to the form to inherit from. Ссылка должна содержать пространство имен, в котором содержится форма, точку, а затем имя базовой формы. The reference should include the namespace that contains the form, followed by a period, then the name of the base form itself.

При наследовании форм следует помнить, что могут возникнуть проблемы с обработчиками событий, которые вызываются дважды, так как каждое событие обрабатывается базовым классом и производным классом. When inheriting forms, keep in mind that issues may arise with regard to event handlers being called twice, because each event is being handled by both the base class and the inherited class. Дополнительные сведения о том, как избежать этой проблемы, см. в разделе Устранение неполадок, связанных с унаследованными обработчиками событий в Visual Basic. For more information on how to avoid this problem, see Troubleshooting Inherited Event Handlers in Visual Basic.

Практическое руководство. Наследование класса Control How to: Inherit from the Control Class

Если необходимо создать полностью настраиваемый элемент управления для использования в форме Windows Forms, следует наследовать от Control класса. If you want to create a completely custom control to use on a Windows Form, you should inherit from the Control class. При наследовании от Control класса требуется выполнение большего планирования и реализации, а также обеспечивается самый широкий диапазон параметров. While inheriting from the Control class requires that you perform more planning and implementation, it also provides you with the largest range of options. При наследовании от Control вы наследуете самые базовые функции, делающие элементы управления работоспособными. When inheriting from Control, you inherit the very basic functionality that makes controls work. Функции, реализованные в Control классе, управляют вводом данных пользователем с помощью клавиатуры и мыши, определяют границы и размер элемента управления, предоставляют дескриптор Windows и обеспечивают обработку сообщений и безопасность. The functionality inherent in the Control class handles user input through the keyboard and mouse, defines the bounds and size of the control, provides a windows handle, and provides message handling and security. Они не включают оформление (в данном случае отрисовку графического интерфейса элемента управления) или конкретные функции взаимодействия с пользователем. It does not incorporate any painting, which in this case is the actual rendering of the graphical interface of the control, nor does it incorporate any specific user interaction functionality. Все эти аспекты необходимо прописывать в пользовательском коде. You must provide all of these aspects through custom code.

Создание пользовательского элемента управления To create a custom control

В Visual Studio создайте новый проект приложения Windows или библиотеки элементов управления Windows . In Visual Studio, create a new Windows Application or Windows Control Library project.

В меню Проект выберите команду Добавить класс. From the Project menu, choose Add Class.

В диалоговом окне Добавление нового элемента щелкните пункт Пользовательский элемент управления. In the Add New Item dialog box, click Custom Control.

В ваш проект будет добавлен новый пользовательский элемент управления. A new custom control is added to your project.

Нажмите клавишу F7 , чтобы открыть Редактор кода для пользовательского элемента управления. Press F7 to open the Code Editor for your custom control.

Выберите OnPaint метод, который будет пустым, за исключением вызова OnPaint метода базового класса. Locate the OnPaint method, which will be empty except for a call to the OnPaint method of the base class.

Измените код, добавив в него пользовательское оформление вашего элемента управления. Modify the code to incorporate any custom painting you want for your control.

Сведения о написании кода для отрисовки графического интерфейса элементов управления см. в разделе Рисование и отрисовка пользовательского элемента управления. For information about writing code to render graphics for controls, see Custom Control Painting and Rendering.

Реализуйте необходимые пользовательские методы, свойства или события, которые будут входить в ваш элемент управления. Implement any custom methods, properties, or events that your control will incorporate.

Сохраните и проверьте элемент управления. Save and test your control.

Оцените статью