#javascript #interface #asp.net-ajax #abstract-class
#javascript #интерфейс #asp.net-ajax #абстрактный класс
Вопрос:
примечание: для тех, кто поддерживает SO, библиотека MS Ajax javascript эмулирует классы, интерфейс, перечисления и другие функции OO, но язык ее не поддерживает. Так что не начинайте хвастаться, что в javascript нет класса.
Реализация интерфейса
/// <reference path="MicrosoftAjax.debug.js" />
Type.registerNamespace("Validators");
Validators.IValidate = function () {
throw Error.notImplemented("Interface IValidate must be implemented before invoke.");
};
Validators.IValidate.prototype = {
ErrorMessage: "",
IsValid: false,
Validate: function () {
throw Error.notImplemented("Class must provide a implementation for the method");
}
};
Validators.IValidate.registerInterface("Validators.IValidate");
Объяснение:
Почему я объясняю интерфейс, который не имеет отношения к вопросу? я объясню по ходу дела. Приведенный выше код создаст интерфейс IValidate
, который имитирует IValidator из фреймворка. Работа с этим Error.notImplemented
кодом выглядит следующим образом
- Не позволяет другим делать это
new Validators.IValidate()
(т.е. Нет экземпляра - Когда класс реализует интерфейс,
Validate()
метод выдает ошибку, если он не реализован
Итак, теперь вы, должно быть, поняли, как выполняется эмуляция. Аналогичным образом я создал класс (на самом деле я хотел абстрактный класс, поэтому я здесь), названный BaseValidator
так
Validators.BaseValidator = function () {
throw Error.invalidOperation("Base validator is a abstract class. Inherit the class to work with it");
};
Validators.BaseValidator.prototype = {
ValidationProperty: function (propertyName) {
},
BackColor: function (hexCode) {
},
ControlToValidate: function (id) {
},
CssClass: function (css) {
},
Display: function (mode) {
},
Focus: function () {
}
};
Validators.BaseValidator.registerClass("Validators.BaseValidator", null, Validators.IValidate);
в последней строке вы можете заметить, что он реализует интерфейс (но не обеспечивает реализацию, поскольку она будет предоставляться дочерними классами BaseValidator
class). Когда когда-либо класс реализует интерфейс, наследует другой класс, который должна вызывать функция конструктора Validators.BaseValidator.initializeBase(this)
, которая инициализирует базовый класс. Теперь, перейдя к проблеме, внимательно прочитайте, пожалуйста
Проблема
Validators.RequiredFieldValidator = function () {
Validators.RequiredFieldValidator.initializeBase(this, []);
};
Validators.RequiredFieldValidator.prototype = {};
Validators.RequiredFieldValidator.registerClass("Validators.RequiredFieldValidator", Validators.BaseValidator);
-
RequiredFieldValidator наследует BaseValidator как базовый класс
-
В конструкторе вызывается
initializeBase(this)
для инициализации базового класса, НО конструктор в базовом классе выдает ошибку.
Вопрос
Как я должен эмулировать абстрактный класс с помощью Microsoft Asp.net Аякс
Комментарии:
1. @Raynos боже, прекрати голосование, ты читал заметку в верхней части вопроса. Microsoft Ajax здесь msdn.microsoft.com/en-us/library/bb397536.aspx и Microsoft поддерживает это. У нас нет других средств реализации ajax в asp.net .
2. «нет других средств реализации ajax в asp.net «. Извините, что? ЧТО? Когда-нибудь слышали о
XMLHTTPRequest
? Прекратите использовать бесполезный мусор, который дает вам Microsoft.3. @Deeptechtons ?? Люди постоянно используют Ajax в ASP.NET со всеми видами фреймворков. Вы можете использовать любую понравившуюся вам технику JavaScript; серверной структуре все равно.
4. @Pointy и Raynos отклонились от темы. Если вы можете быть конструктивными, пожалуйста, предоставьте ответ и ответьте, если бы вы ТОЛЬКО знали, что может предложить клиентская библиотека спасибо
5. @Deeptechtons не в тему. Вы думаете, что у вас проблема, и говорили вам, что ваша реальная проблема заключается в использовании «библиотеки MS ajax». Используйте достойную утилиту ajax, и все ваши проблемы исчезнут.
Ответ №1:
В конструкторе вызывается initializeBase(this) для инициализации базового класса, НО конструктор в базовом классе выдает ошибку
Validators.RequiredFieldValidator = function () { };
Что плохого в том, чтобы просто не вызывать суперконструктор. Если конструктор, от которого вы наследуете, должен быть абстрактным (бесполезная вещь), тогда просто никогда не вызывайте его.