|
Программирование >> Программирование с использованием ajax
Правильный способ указания базового класса и интерфейса выглядит так: 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*
MyClass interface* IMylnterface
O IMylnterface Puc. 9.2. Иерархия наследования классов и интерфейсов в проекте Ch09Ex01 Здесь класс Program тоже включен, потому что он определяется подобно другим классам, хотя в состав основной иерархии и не входит. Метод Main (), который имеет этот класс, представляет собой точку входа приложения. Определения MyBase и IMyBaselnterface являются общедоступными, т.е. эти классы будут доступны и в других проектах. Все остальные классы и интерфейсы являются внутренними, т.е. будут доступны только в этом проекте. Код в Main () вызывает метод ToString () объекта myObj, представляющего собой экземпляр класса MyComplexClass: MyComplexClass myObj = new MyComplexClass(); Console.WriteLine(myObj.ToString());
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |