Из исходного вопроса не совсем ясно, где выбрасывается исключение, но выглядит очень странно, что вы повторяете несколько строк из firstButtonClicked
в производном (дочернем) классе, а затем вызываете метод в базе (родительский) класс.
Когда вы следуете по пути кода, например, ImagesClick
увеличивается вдвое (один раз в производном классе, а затем один раз в родительском классе, то же самое происходит с buttonClicked()
и моим предположением (потому что я не знаю, реализация) состоит в том, что кнопка становится неактивной, потому что buttonClicked()
вызывается дважды.
Одним из преимуществ наследования является то, что вам не нужно повторять общий код. Ваш метод производного класса firstButtonClicked
может работать с просто:
public override void firstButtonClicked()
{
finalAnswer += "f";
TryInheritance =finalAnswer;
base.firstButtonClicked();
}
Это будет соответствовать любому данному элементу точному имени тега и названию атрибута / пары значения:
public static void ReplaceOrAdd(this XElement source, XElement node)
{
var q = from x in source.Elements()
where x.Name == node.Name
&& x.Attributes().All(a =>node.Attributes().Any(b =>a.Name==b.Name && a.Value==b.Value))
select x;
var n = q.LastOrDefault();
if (n == null) source.Add(node);
else n.ReplaceWith(node);
}
var root = XElement.Parse(data);
var newElem =XElement.Parse("<thing2 a1=\"a\" a2=\"b\">new value</thing2>");
root.ReplaceOrAdd(newElem);
Можно сделать XPathSelectElement с путем (не заключайте мне в кавычки, к панели; вымоется утром),/root/thing2 [@a1 ='a' и @a2 ='b'], и затем возьмите.LastOrDefault () (XPathSelectElement является дополнительным методом в system.Linq.Xml).
Это получит Вас узел, который Вы хотите изменить. Я не уверен, как Вы хотите изменить его, как бы то ни было. Результатом, который Вы получаете, является фактический XElement, так изменение, это изменит древовидный элемент.