Как вы контролируете типы объектов, которые вы можете добавить в XElement? - PullRequest
2 голосов
/ 11 июля 2010

Есть ли способ создать класс, производный от XElement, но также управлять типами объектов, которые могут быть к нему добавлены?

Например, скажем, у меня есть это ...

public class HtmlHead : XElement {}

Но я не могу переопределить метод Add(), потому что он находится на уровне XContainer. И даже если бы я должен был создать класс, производный от XContainer, у меня все еще нет доступа к переопределению методов Add().

Зачем мне это делать, спросите вы?

Я хочу убедиться, что, если моя программа компилирует , она также правильно анализирует HTML. Например, вы можете добавлять только определенные элементы в тег HTML <head>, поэтому я хочу убедиться, что можно добавлять только поддерживаемые теги.

Конечно, вы не будете добавлять тег <anchor> к тегу <head> - вы меня чувствуете?

1 Ответ

2 голосов
/ 11 июля 2010

Вы можете управлять переданным именем через конструктор.

public class HtmlHead : XElement
{
    public HtmlHead(object content) : base("head")
    {
        this.Add(content);
    }

    public HtmlHead(params object[] content) : base("head", content) { }
}

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

...