Альтернатива для статического метода в интерфейсе - применение методов уровня класса в пользовательских элементах управления asp.net - PullRequest
0 голосов
/ 28 октября 2010

У меня есть иерархия в моем проекте веб-сайта, как показано ниже:

[CustomControl1 - folder]
- CustomControl1.ascx
- CustomControl1.css
- CustomControl1.js

Я загружаю файлы CSS и JS динамически в зависимости от того, какие элементы управления используются на конкретной странице. Я делаю это с помощью следующего кода:

protected void Page_Load(object sender, EventArgs e)
{
    CustomControl1.AddLinks( Page.Header);
    CustomControl2.AddLinks( Page.Header);
    ...
}

, где AddLinks метод добавляет HtmlLink элементы управления к Page.Header с атрибутом href, установленным для соответствующих css и / или js файлов.

Я хотел бы добавить интерфейс, который заставил бы новые элементы управления иметь метод AddLinks , но это невозможно, поскольку это статический метод. Поскольку мои пользовательские элементы управления наследуются от класса Control, я также не могу использовать абстрактный класс и / или виртуальные методы. Как мне достичь своей цели?

Примечание:

Я знаю, что подобные (о статических методах в интерфейсах) вопросы были опубликованы на SO раньше, но я не нашел там правильного решения. (или я слишком дурак, чтобы понять, что это было правильное решение; -)

1 Ответ

1 голос
/ 28 октября 2010

Ты не можешь.Я точно понимаю, почему вы хотите использовать статический метод на интерфейсе для реализации вашего паттерна, но c # не допускает статические методы на интерфейсах, поэтому вы зашли в тупик.

Предполагается, что вы не хотитечтобы просто вызвать метод для экземпляра вашего элемента управления по какой-либо причине, вы застряли в том, чтобы убедиться, что вы реализуете все свои статические методы, используя отражение (вонючий) и т. д.1006 *

также лично я считаю, что элемент управления должен быть достаточно умным, чтобы добавлять ссылки, если они ему нужны.Page.ClientScript содержит методы для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...