3

MinValue、MaxValueという2つのプロパティを持つ1つのクラスがあります。誰かがこのクラスを呼び出してこのクラスをインスタンス化する場合は、MinValueまたはMax Value、あるいはその両方を選択できるコンストラクターが必要です。MinValueとMaxValueは両方ともです。 int、したがって、コンストラクターは私にこのように許可しません:

public class Constructor
{
    public int Min { get; set; }
    public int Max { get; set; }
    public Constructor(int MinValue, int MaxValue)
    {
        this.Min = MinValue;
        this.Max = MaxValue;
    }

    public Constructor(int MaxValue)
    {
        this.Max = MaxValue;
    }

    public Constructor(int MinValue)
    {
        this.Min = MinValue;
    }
}

2つのコンストラクターをオーバーロードできないため、これを実行できません。これを実装するにはどうすればよいですか?

4

3 に答える 3

6

部分的な情報しか得られない2つの部分に対して2つの静的メソッドを作成します。例えば:

public Constructor(int minValue, int maxValue)
{  
    this.Min = minValue;
    this.Max = maxValue;
}

public static Constructor FromMinimumValue(int minValue)
{
    // Adjust default max value as you wish
    return new Constructor(minValue, int.MaxValue);
}

public static Constructor FromMaximumValue(int maxValue)
{
    // Adjust default min value as you wish
    return new Constructor(int.MinValue, maxValue);
}

(名前付き引数を使用するC#4オプションも優れていますが、すべての呼び出し元が名前付き引数をサポートすることがわかっている場合に限ります。)

于 2012-11-17T18:33:37.297 に答える
4

できません。ただし、C#4.0を使用している場合は、次のようにすることができます。

class YourTypeName
{
    public YourTypeName(int MinValue = 1,  int MaxValue = 100)
    {  
        this.Min=MinValue;
        this.Max=MaxValue;
    }
}


var a = new YourTypeName(MinValue: 20);
var b = new YourTypeName(MaxValue: 80);

または、C#3.0以降では、次のように実行できます。

class YourTypeName
{
    public YourTypeName()
    {
    }

    public YourTypeName(int MinValue,  int MaxValue)
    {  
        this.Min=MinValue;
        this.Max=MaxValue;
    }

    public int Min {get;set;}

    public int Max {get;set;}
}

var a = new YourTypeName { Min = 20 };
var b = new YourTypeName { Max = 20 };
于 2012-11-17T18:36:46.490 に答える
0
public Constructor(int minValue = 0, int maxValue = 0) // requires C# 4+
{
}

また

struct ValueInfo
{
    public MinValue { get; set; }
    public MaxValue { get; set; }
}

public Constructor(ValueInfo values) // one or another or both values can be specified
{
}
于 2012-11-17T18:47:13.740 に答える