2009-07-16 7 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

/// <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種子を養うことができないことを考えると固定コード

+0

あなたの例では、同じ3パラメータのコンストラクタのうちの2つを提供し、2パラメータのコンストラクタをミス。 – 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ディアス]:あなたの例では、おそらくゼロにULONGシード値デフォルトデフォルト@Steven –

関連する問題