我有两个构造函数,它们将值提供给只读字段。
public class Sample
{
public Sample(string theIntAsString)
{
int i = int.Parse(theIntAsString);
_intField = i;
}
public Sample(int theInt) => _intField = theInt;
public int IntProperty => _intField;
private readonly int _intField;
}
一个构造函数直接接收值,另一个构造函数进行一些计算并获得值,然后设置字段。
现在问题来了:
我不想复制
设置代码。在这种情况下,只有一个
场地已经设置好了,当然还有可能
要大于1。
要使字段为只读,我需要
从构造函数中设置它们,那么
我不能将共享代码“提取”到
效用函数。
我不知道怎么叫
另一个构造函数。
什么好主意吗?
在我的例子中,我有一个主构造函数,它使用OracleDataReader作为参数,但我想使用不同的查询来创建实例:
我有这样的代码:
public Subscriber(OracleDataReader contractReader)
{
this.contract = Convert.ToString(contractReader["contract"]);
this.customerGroup = Convert.ToString(contractReader["customerGroup"]);
this.subGroup = Convert.ToString(contractReader["customerSubGroup"]);
this.pricingPlan= Convert.ToString(contractReader["pricingPlan"]);
this.items = new Dictionary<string, Member>();
this.status = 0;
}
所以我创建了以下构造函数:
public Subscriber(string contract, string customerGroup) : this(getSubReader(contract, customerGroup))
{ }
这个方法是:
private static OracleDataReader getSubReader(string contract, string customerGroup)
{
cmdSubscriber.Parameters[":contract"].Value = contract + "%";
cmdSubscriber.Parameters[":customerGroup"].Value = customerGroup+ "%";
return cmdSubscriber.ExecuteReader();
}
注意:静态定义的cmdSubscriber在代码的其他地方定义;在这个示例中,我的主构造函数进行了简化。