我有两个构造函数,它们将值提供给只读字段。
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在代码的其他地方定义;在这个示例中,我的主构造函数进行了简化。
当从基类继承类时,可以通过实例化派生类来调用基类构造函数
class sample
{
public int x;
public sample(int value)
{
x = value;
}
}
class der : sample
{
public int a;
public int b;
public der(int value1,int value2) : base(50)
{
a = value1;
b = value2;
}
}
class run
{
public static void Main(string[] args)
{
der obj = new der(10,20);
System.Console.WriteLine(obj.x);
System.Console.WriteLine(obj.a);
System.Console.WriteLine(obj.b);
}
}
示例程序的输出为
50 10 20
还可以使用此关键字从另一个构造函数调用一个构造函数
class sample
{
public int x;
public sample(int value)
{
x = value;
}
public sample(sample obj) : this(obj.x)
{
}
}
class run
{
public static void Main(string[] args)
{
sample s = new sample(20);
sample ss = new sample(s);
System.Console.WriteLine(ss.x);
}
}
这个示例程序的输出是
20