Создание нескольких экземпляров дочернего класса в методе родительского класса - PullRequest
2 голосов
/ 03 апреля 2011

У меня есть следующие классы:

abstract class Transport{

    protected String name;

    protected Transport(String name){
        this.name=name;
    }

    protected void DoSomething(){
        //Creating some instances of the type of the current instance   
    }   

}

class Bike: Transport {

    public Bike(String name): base(name){

    }

}

class Bus: Transport {

    public Bus(String name): base(name){

    }

}

Я хотел бы создать несколько экземпляров типа текущего экземпляра внутри метода DoSomething класса Transport.

Как мне это сделать?

Я могу создать статический метод фабрики, который принимает имя дочернего класса, который я хотел бы создать, и затем передавать ему имя класса текущего экземпляра внутри.DoSomething метод с использованием this.GetType().Name.

Но разве это лучший способ?

Большое спасибо всем вам.

Ответы [ 2 ]

10 голосов
/ 03 апреля 2011

Вы можете создать метод protected abstract Transport CreateNew(string name) в базовом классе и переопределить его в производных классах для вызова их конструкторов.

4 голосов
/ 03 апреля 2011

Вы открыты для использования отражения?

protected void DoSomething(){
    Transport newOne =  GetType()
                           .GetConstructors()[0]
                           .Invoke(new[] {"some name"})
}

Вышеуказанное работает в вашем конкретном случае. Обратите внимание на использование [0] для получения первого конструктора. Это не проблема для тривиального примера в вашем вопросе. Вы можете рассмотреть возможность использования других перегрузок на System.Type , чтобы получить конкретный нужный конструктор.

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