Как провести рефакторинг этих перегруженных конструкторов классов? (С #)

2

Я не хочу реплицировать код через перегруженные конструкторы, как показано ниже. Как его реорганизовать?

/// <summary>
/// Represents a pseudo-random number generator, a device that
/// produces a sequence of numbers that are normally distributed.
/// </summary>
public class NormalDeviate : UniformDeviate
{
    double mean;
    double standardDeviation;
    double storedValue = 0d;

    /// <summary>
    /// Initializes a new instance of the <see cref="NormalDeviate"/> class.
    /// </summary>
    /// <param name="mean">The mean.</param>
    /// <param name="standardDeviation">The standard deviation.</param>
    /// <param name="seed">The seed.</param>
    public NormalDeviate(double mean, double standardDeviation, ulong seed)
        : base(seed)
    {
        this.mean = mean;
        this.standardDeviation = standardDeviation;
    }

    /// <summary>
    /// Initializes a new instance of the <see cref="NormalDeviate"/> class.
    /// </summary>
    /// <param name="mean">The mean.</param>
    /// <param name="standardDeviation">The standard deviation.</param>
    public NormalDeviate(double mean, double standardDeviation)
        : base()
    {
        this.mean = mean;
        this.standardDeviation = standardDeviation;
    }
}
Теги:
refactoring

3 ответа

2
Лучший ответ

Учитывая, что вы не можете кормить базовый конструктор семенем 0, когда семя не предусмотрено, это будет то, что вы хотите:

/// <summary>
/// Represents a pseudo-random number generator, a device that
/// produces a sequence of numbers that are normally distributed.
/// </summary>
public class NormalDeviate : UniformDeviate
{
    double mean;
    double standardDeviation;
    double storedValue = 0d;

    /// <summary>
    /// Initializes a new instance of the <see cref="NormalDeviate"/> class.
    /// </summary>
    /// <param name="mean">The mean.</param>
    /// <param name="standardDeviation">The standard deviation.</param>
    /// <param name="seed">The seed.</param>
    public NormalDeviate(double mean, double standardDeviation, ulong seed)
        : base(seed)
    {
        CommonInitialization(mean, standardDeviation);
    }

    /// <summary>
    /// Initializes a new instance of the <see cref="NormalDeviate"/> class.
    /// </summary>
    /// <param name="mean">The mean.</param>
    /// <param name="standardDeviation">The standard deviation.</param>
    public NormalDeviate(double mean, double standardDeviation)
        : base()
    {
        CommonInitialization(mean, standardDeviation);
    }

    private void CommonInitialization(double mean, double standardDeviation)
    {
        this.mean = mean;
        this.standardDeviation = standardDeviation;
    }
}
1
public ClassName(double arg1, double arg2, double arg3) : base(arg3) 
{
    _member1 = arg1;
    _member2 = arg2;
}
public ClassName(double arg1, double arg2) : this(arg1,arg2,0) { }
public ClassName(double arg1) : this(arg1,0,0) { }
  • 0
    Это неверно Жестко закодированный ноль достигнет базового конструктора.
  • 0
    @ [Jader Dias]: это всего лишь пример. используйте NaN или любой другой по умолчанию, подходящий для неопределенных значений
Показать ещё 3 комментария
0

Как насчет этого?

public class NormalDeviate : UniformDeviate
{
    double mean;
    double standardDeviation;
    double storedValue;

    /// <summary>
    /// Initializes a new instance of the <see cref="NormalDeviate"/> class.
    /// </summary>
    /// <param name="mean">The mean.</param>
    /// <param name="standardDeviation">The standard deviation. The distance from the mean where 78.2% of the samples lie.</param>
    /// <param name="seed">The seed.</param>
    public NormalDeviate(double mean, double standardDeviation, ulong seed) : base(seed)
    {
        this.mean = mean;
        this.standardDeviation = standardDeviation;
        this.storedValue = 0d;
    }

    /// <summary>
    /// Initializes a new instance of the <see cref="NormalDeviate"/> class.
    /// </summary>
    /// <param name="mean">The mean.</param>
    /// <param name="standardDeviation">The standard deviation. The distance from the mean where 78.2% of the samples lie.</param>
    public NormalDeviate(double mean, double standardDeviation)
        : this(mean, standardDeviation, 0)
    {

    }
}

EDIT: Фиксированный код

  • 0
    Ваш пример предоставляет два одинаковых трехпараметрических конструктора и пропускает двухпараметрический конструктор.
  • 0
    Виноват. Исправлен код. Спасибо за указание на мою ошибку.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню