Программирование >>  Программирование с использованием ajax 

1 ... 67 68 69 [ 70 ] 71 72 73 ... 396


Правильный способ указания базового класса и интерфейса выглядит так:

public class MyClass : MyBase, IMylnterface

Члены класса.

He следует забывать о том, что интерфейсов может быть несколько, поэтому следующий код тоже допустим:

public class MyClass : MyBase, IMylnterface, IMySecondlnterface

Члены класса.

В табл. 9.1 перечислены все комбинации модификаторов доступа, которые разрешено применять в определениях классов.

Таблица 9.1. Допустимые комбинации модификаторов доступа для определений классов Модификатор Значение

Отсутствует или internal Класс, к которому может быть получен доступ только из теку-

щего проекта

public Класс, к которому может быть получен доступ из любого места

abstract или Класс, к которому может быть получен доступ только из теку-

internal abstract щего проекта, и который не допускает создания экземпляров,

т.е. позволяет создавать только производные классы

public abstract Класс, к которому может быть получен доступ из любого мес-

та, и который не допускает создания экземпляров, т.е. позволяет создавать только производные классы

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

public sealed Класс, к которому может быть получен доступ из любого мес-

та, и который не допускает создания производных классов, т.е. допускает создание только экземпляров

Определения интерфейсов

Интерфейсы объявляются похожим на классы образом, но только с использованием не ключевого слова class, а ключевого слова interface:

interface IMylnterface {

Члены интерфейса.

Ключевые слова public и internal, играющие роль модификаторов доступа, применяются точно таким же образом, и подобно классам интерфейсы по умолчанию объявляются внутренними. Чтобы сделать интерфейс общедоступным, нужно использовать ключевое слово public:

public interface IMylnterface



Ключевые слова abstract и sealed являются недопустимыми, поскольку ни один из этих модификаторов не имеет смысла в контексте интерфейсов (они не содержат никакой реализации, из-за чего создавать их экземпляры напрямую нельзя, а для того чтобы приносить пользу, они должны обязательно допускать наследование).

Наследование интерфейсов тоже задается похожим с классами образом. Главное отличие состоит лишь в том, что в их случае может использоваться несколько базовых интерфейсов, как показано ниже:

public interface IMylnterface : IMyBaselnterfасе, IMyBaseInterface2

Члены интерфейса.

Интерфейсы не являются классами и, следовательно, не наследуются от System. Ob j ect. Тем не менее, члены System. Ob j ect доступны через переменную типа интерфейса, исключительно для удобства. Кроме того, как упоминалось ранее, создавать экземпляр интерфейса так же, как экземпляр класса, нельзя. В следующем практическом занятии приводится пример некоторых определений классов вместе с кодом, где они используются.

практическое зан>11 { Определение классов

1. Создайте новое консольное приложение по имени Ch09Ex01 и сохраните его в каталоге C:\BegVCSharp\Chapter09.

2. Измените код в Program, cs следующим образом:

namespace Ch09Ex01 {

public abstract class MyBase

internal class MyClass : MyBase public interface IMyBaseInterface

nternal interface IMyBaseInterface2 internal interface IMylnterface : IMyBaseInterface, IMyBaseInterface2

nternal sealed class MyComplexClass : MyClass, IMylnterface

class Program {

static void Main(string[] args)

MyComplexClass xnyObj = new MyConplexClass () , Console .WriteLine (inyObj . ToString ()) ; Console.ReadKey();



Запустите приложение. На рис. 9.1 показан результат, который должен получиться.


Рис. 9.1. Приложение Ch О 9Ех 01 в действии

Описание полученных результатов

Классы и интерфейсы, определенные в этом проекте, в целом образуют иерархию наследования, которая показана на рис. 9.2.

System.Object

interface* IMyBaselnterface

interface*

Program

-Maindn args : string[])

MyBase

MyClass

interface* IMylnterface

MyComplexClass

O IMylnterface

Puc. 9.2. Иерархия наследования классов и интерфейсов в проекте Ch09Ex01

Здесь класс Program тоже включен, потому что он определяется подобно другим классам, хотя в состав основной иерархии и не входит. Метод Main (), который имеет этот класс, представляет собой точку входа приложения.

Определения MyBase и IMyBaselnterface являются общедоступными, т.е. эти классы будут доступны и в других проектах. Все остальные классы и интерфейсы являются внутренними, т.е. будут доступны только в этом проекте.

Код в Main () вызывает метод ToString () объекта myObj, представляющего собой экземпляр класса MyComplexClass:

MyComplexClass myObj = new MyComplexClass(); Console.WriteLine(myObj.ToString());



1 ... 67 68 69 [ 70 ] 71 72 73 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика