2009-07-16 120 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) 
    { 

    } 
} 

编辑:固定码

+0

您的示例提供了两个相同的三参数构造函数,但未使用双参数构造函数。 – jasonh 2009-07-16 01:48:35

+0

我的不好。修复了代码。感谢您指出我的错误。 – SolutionYogi 2009-07-16 01:52:12

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) { }