我有一个类有2个属性,名为MinValue,MaxValue,如果有人想要调用这个类并实例化这个类,我需要有一些构造函数允许选择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;
}
}
现在我不能这样做,因为我不能重载两个构造函数, 我该如何实现呢?
答案 0 :(得分:6)
我会为你只有部分信息的两个部分创建两个静态方法。例如:
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选项也很好,但如果您知道所有调用者都支持命名参数,则仅。)
答案 1 :(得分: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 };
答案 2 :(得分: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
{
}