Родительский метод, который выбирает дочерний класс (C #) - PullRequest
1 голос
/ 16 февраля 2011

Я стараюсь избегать дублирующих блоков кода - каждый имеет дело с разными дочерними элементами родителя.Вот пример того, чего я хотел бы избежать:

if (FormNumber == 0)
    {  
    Child1 obj = new Child1()  
    statements;
    }
else
    {  
    Child2 obj = new Child2()  
    statements;
    }

Я хотел бы передать FormNumber родительскому классу и использовать родительскую функцию, чтобы определить, какой дочерний класс используется.Я представляю себе родительскую функцию, например:

public Parent GetChild(int F)  
    {  
        if (FormNumber == 0)
            return new Child1();
        else
            return new Child2();
    } 

, а затем в основной функции

Parent obj = new Parent();  
Child? newobj = obj.GetChild(FormNumber);  
statements;

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

Ответы [ 2 ]

3 голосов
/ 16 февраля 2011

Вы ищете фабрика / стратегия шаблон. Получите, чтобы они реализовали подобный интерфейс и имели это:

IChild newobj = obj.GetChild(FormNumber);  
1 голос
/ 16 февраля 2011

Вам необходимо настроить иерархию наследования для Child.Если вы настроили общий интерфейс для Child1 и Child2, то вы можете сделать следующее:

Parent obj = new Parent();  
IChild newobj = obj.GetChild(FormNumber); 
// newobj may be a Child1 or Vhild2 object.

Иерархия может выглядеть так:

public interface IChild {
    public methods();
}

public class Child1 : IChild {}

public class Child2 : IChild {}

Ваш метод может выглядеть так:

public IChild GetChild(int F)  
{  
    if (FormNumber == 0)
        return new Child1();
    else
        return new Child2();
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...