Интерфейсы

Последняя объектно?ориентированная особенность, появившаяся в JavaScript благодаря ASP.NET AJAX, – это интерфейсы. Они вообще не содержат в себе реализации чего бы то ни было, а просто определяют набор членов, которые должны быть реализованы в классах-наследниках. При наследовании интерфейсов вы не получаете никакой реализации для использования. Напротив, вы должны создать методы, объявленные в интерфейсе. Это прекрасный способ разделения структуры класса и его реализации.

Как вы уже, вероятно, догадались, интерфейсы создаются вызовом метода Type.registerInterface(). Имя вновь созданного интерфейса затем может быть передано методу registerClass() в третьем (необязательном) аргументе. Таким образом, если начинать реализацию приложения с интерфейса, мы могли бы начать со следующего фрагмента:

OReilly.IProduct = function() {
this.toString = Function.abstractMethod;
}
Type.registerInterface("OReilly.IProduct");
Ниже приводится определение абстрактного класса OReilly.Product.

К сожалению, окончательная версия ASP.NET AJAX не поддерживает абстрактные классы (в предварительной версии такая поддержка существовала).


Таким образом, можно считать, что чисто технически между обычными и абстрактными классами нет никакой разницы.

В следующем примере класс OReilly.Product объявляет и реализует свойства name и vendor.
OReilly.Product = function(name, vendor) {
var _name = (name != null) ? name : "unknown";
var _vendor = (vendor != null) ? vendor : "unknown";
this.getName = function() {
return _name;
}
this.setName = function(name) {
_name = name;
}
this.getVendor = function() {
return _vendor;
}
this.setVendor = function(vendor) {
_vendor = vendor;
}
}
Type.registerClass("OReilly.Product");

Следующий на очереди класс – OReilly.Software. Поскольку мы не предполагаем создавать экземпляры этого класса (для этих целей мы будем использовать классы, подобные OReilly.Browser), то он будет выполнять роль абстрактного класса. Он наследует свойства класса OReilly.Product (name и vendor), а также реализует интерфейс OReilly.IProduct (метод toString()). После объявления класса мы зарегистрируем его следующим вызовом метода Type.registerClass():

OReilly.Software.registerClass("OReilly.Software", OReilly.Product,
OReilly.IProduct);

Остальная часть программного кода останется без изменений.


Сценарий получился достаточно длинным, поэтому, чтобы не загромождать файл .aspx, имеет смысл поместить его в отдельный файл с расширением .js. Полный исходный текст приводится в примере 4.4.
Пример 4.4. Использование интерфейса для структурирования программного кода ClientInterface.aspx
<%@ Page Language="C#" %>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1?transitional.dtd"> ASP.NET AJAX


(body)
(asp:ScriptManager ID="ScriptManager1" runat="server")
(/asp:ScriptManager)


(/body)
.



Оцените статью: (0 голосов)
0 5 0

Статьи из раздела ASP.NET AJAX на эту тему:
Sys.StringBuilder
Клиентские версии классов .NET
Методы элементов DOM
Наследование классов
Объектно-ориентированные возможности JavaScript в ASP.NET AJAX