Насколько я знаю, способы перегрузки - это то, что он проверяет количество параметров, которые вы ему поставляете, а затем проверяет, какой конструктор он должен использовать.
Нет, перегрузка не основываются исключительно на числе параметров - это основано на их типов тоже.
Однако:
В двух конструкторах одни и те же, и принимает строки
Это проблема. Вы не можете объявить два конструктора, как это:
public Foo(string x)
{
}
public Foo(string y)
{
}
Эти подписи конфликтовать, насколько перегрузкой обеспокоен.
я предложил бы иметь общественные статические фабричные методы, так что вы можете указать, что вы пытаетесь создать:
public static Foo FromGears(string gears)
{
return new Foo(...);
}
public static Foo FromMaximumSpeed(string maxSpeed)
{
return new Foo(...);
}
Вы бы тогда, возможно, один конструктор, который принят как значения, и по умолчанию, если он отсутствует, когда вы вызываете конструктор из заводского метода.
Однако, есть две другие странности в описании:
- Вы используете строки для двух значений, которые звучат как они должны быть числа (или, возможно, один номер и один number- и-unit)
- Вы говорите об объявлении конструкторов, но затем используете слово «изменить», как будто они собираются изменить существующий экземпляр. Это не имеет смысла - конструкторы используются для создания новых объектов.
EDIT: Хорошо, теперь мы знаем немного больше, вот такая вещь, я имею в виду:
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);
}
}
Обратите внимание, что вы могли использовать необязательные параметры и именованные аргументы для этого тоже в 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;
}
}
Тогда:
Car car = new Car(gears: 4);
Car car = new Car(topSpeed: 30);
Я бы не рекомендовал это вообще, хотя, конечно, не пока вы еще относительно новичок в этом языке. Существуют различные тонкости вокруг необязательных параметров.
Я думаю, что вы неправильно поняли назначение: зачем вы передавали количество передач (число) или максимальную скорость (также число) в виде строки? Но это наблюдение не обязательно решает проблему. Ваши сомнения в основном правильны - сомнительно, будет ли хороший дизайн ООП использовать здесь конструкторы. –
Является ли ваше * присваивание * использовать конструкторы, или это * ваш способ решения * конкретного задания? –
Похоже, это вызовет двусмысленность. Не уверен, что это возможно. –