Похоже, вы хотите указать во время выполнения, какое поведение использовать, включив фактический тип, что и является полиморфизмом.
Вам не понадобится интерфейс, поскольку у вас уже есть общий базовый класс. Так что просто измените private IBaseClass _child = GetChildClass()
на private BaseClass _child = GetChildClass()
:
public class Program
{
private BaseClass _child = GetChildClass();
public void MethodOne()
{
DoSomething(_child);
}
public void MethodTwo()
{
DoSomething(_child);
}
}
Это предполагает, что DoSomething
просто ожидает BaseClass
в качестве параметра.
Сложная задача - выяснить, где еще существует ссылка на нарушающие узлы.
Вы делаете это трудным путем - вы добавляете всю разметку на страницу, а затем удаляете ненужные элементы. Вместо этого я бы сделал это следующим образом:
var div = document.createElement('div');
// (Don't append it to the document.)
$(div).html(xhtml);
var stuffToKeep = $(div).find("form:eq(1)> *").filter(
function() {
return $(this).attr('id') !== '';
}
);
parentObj.append(stuffToKeep);
// Then null out the original reference to the DIV to be safe.
div = null;
Это не гарантирует остановку утечки, но это хорошее начало.
remove ()
и ему подобные удаляют только элементы из DOM. Они все еще где-то существуют в памяти.
Это известная проблема с AJAX и Web 2.0. Вы мало что можете сделать, кроме разработки своего сайта и обеспечения того, чтобы время от времени обновлялась страница, чтобы все стереть.