Por lo que sé, la forma en que funciona la sobrecarga es que comprueba la cantidad de parámetros que usted proporciona y luego verifica qué constructor debe usar.
No, la sobrecarga no se basa únicamente en el número de parámetros - que se basa en sus tipos también.
Sin embargo:
Como dos de los constructores son los mismos, tanto acepta cadenas
eso es un problema. No se puede declarar dos constructores de esta manera:
public Foo(string x)
{
}
public Foo(string y)
{
}
Esas firmas chocan en lo que se refiere a la sobrecarga.
Yo sugeriría tener métodos de fábrica públicas estáticas, lo que permite indicar lo que está tratando de crear:
public static Foo FromGears(string gears)
{
return new Foo(...);
}
public static Foo FromMaximumSpeed(string maxSpeed)
{
return new Foo(...);
}
Se podría entonces posiblemente tiene un constructor que aceptó ambos valores, y predeterminado cualquiera que falta cuando llama al constructor desde el método de fábrica.
Sin embargo, hay otros dos rarezas en su descripción:
- Estás usando cuerdas para dos valores que suenan como deberían ser números (o posiblemente un número, y un número- y-unidad)
- Está hablando de declarar constructores, pero luego usa la palabra "cambiar" como si fuera a cambiar una instancia existente. Eso no tiene sentido: los constructores se usan para crear nuevos objetos.
EDIT: Bueno, ahora sabemos un poco más, aquí es el tipo de cosas que quiero decir:
public class Car
{
private const int DefaultGears = 5;
private const int DefaultTopSpeed = 180;
private readonly int gears;
private readonly int topSpeed;
public Car(int gears, int topSpeed)
{
this.gears = gears;
this.topSpeed = topSpeed;
}
public static Car CreateWithGears(int gears)
{
return new Car(gears, DefaultTopSpeed);
}
public static Car CreateWithTopSpeed(int topSpeed)
{
return new Car(topSpeed, DefaultGears);
}
}
Tenga en cuenta que podía parámetros uso opcionales y argumentos con nombre para esto también en C# 4 :
public class Car
{
public const int DefaultGears = 5;
public const int DefaultTopSpeed = 180;
private readonly int gears;
private readonly int topSpeed;
public Car(int gears = DefaultGears, int topSpeed = DefaultTopSpeed)
{
this.gears = gears;
this.topSpeed = topSpeed;
}
}
continuación:
Car car = new Car(gears: 4);
Car car = new Car(topSpeed: 30);
No lo recomendaría en general, sin embargo, no mientras usted todavía es relativamente nuevo en el lenguaje. Hay varias sutilezas alrededor de los parámetros opcionales.
Creo que leyó mal la tarea: ¿por qué pasaría la cantidad de engranajes (un número) o la velocidad máxima (también un número) como una cadena? Pero esta observación no necesariamente resuelve el problema. Su duda es esencialmente correcta: es cuestionable si un buen diseño de OOP usaría constructores aquí. –
¿Tu * tarea * es usar constructores, o es * tu forma de resolver * la tarea en particular? –
Suena así podría causar ambigüedad. No estoy seguro de que esto sea posible. –