Em Java e C #, é possível criar um objeto com propriedades que podem ser configuradas na inicialização, definindo um construtor com parâmetros, definindo cada propriedade após a construção do objeto ou usando o padrão de interface do construtor / fluido. No entanto, o C # 3 introduziu inicializadores de objetos e coleções, o que significava que o padrão do construtor era praticamente inútil. Em uma linguagem sem inicializadores, pode-se implementar um construtor e usá-lo da seguinte maneira:
Vehicle v = new Vehicle.Builder()
.manufacturer("Toyota")
.model("Camry")
.year(1997)
.colour(CarColours.Red)
.addSpecialFeature(new Feature.CDPlayer())
.addSpecialFeature(new Feature.SeatWarmer(4))
.build();
Por outro lado, em C #, pode-se escrever:
var vehicle = new Vehicle {
Manufacturer = "Toyota",
Model = "Camry",
Year = 1997,
Colour = CarColours.Red,
SpecialFeatures = new List<SpecialFeature> {
new Feature.CDPlayer(),
new Feature.SeatWarmer { Seats = 4 }
}
}
... eliminando a necessidade de um construtor, como visto no exemplo anterior.
Com base nesses exemplos, os construtores ainda são úteis em C # ou foram substituídos inteiramente pelos inicializadores?
are builders useful
por que continuo vendo esse tipo de pergunta? Um Construtor é um padrão de design - com certeza, pode ser exposto como um recurso de linguagem, mas no final do dia é apenas um padrão de design. Um padrão de design não pode estar "errado". Pode ou não atender ao seu caso de uso, mas isso não faz com que todo o padrão esteja errado, apenas a aplicação dele. Lembre-se de que, no final do dia, os padrões de design resolvem problemas específicos - se você não enfrenta o problema, por que você tentaria resolvê-lo?