2009-07-16 3 views
2

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

/// <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; 
    } 
} 

ответ

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; 
    } 
} 
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

Ваш пример предоставляет два одинаковых конструктора с тремя параметрами и пропускает двухпараметрический конструктор. – jasonh

+0

Мой плохой. Исправлен код. Спасибо, что указал на мою ошибку. – SolutionYogi

+0

Ваш пример отправляет параметр 0 в базовый конструктор, что не совсем то же самое, что вызвать его с помощью 0 параметров. –

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 или любое другое значение по умолчанию для неуказанных значений –

+0

@ [Jader Dias]: в вашем примере предположительно значение начального значения ulong по умолчанию равно нулю, если не указано ;-) –

Смежные вопросы