我想知道在 C# 中链接构造函数时如何更改执行顺序。我见过的唯一方法要求首先在当前构造函数之外调用链式构造函数。
具体来说,举个例子:
public class Foo {
private static Dictionary<string, Thing> ThingCache = new Dictionary<string, Thing>();
private Thing myThing;
public Foo(string name) {
doSomeStuff();
if (ThingCache.ContainsKey(name)) {
myThing = ThingCache[name];
} else {
myThing = ExternalStaticFactory.GetThing(name);
ThingCache.Add(name, myThing);
}
doSomeOtherStuff();
}
public Foo(Thing tmpThing) {
doSomeStuff();
myThing = tmpThing;
doSomeOtherStuff();
}
}
理想情况下,我想通过这样做来减少代码重复(注意,我承认在这个人为的示例中,并没有保存太多代码,但我正在使用可以带来更多好处的代码。为了清楚起见,我使用这个示例):
public class Foo {
private static Dictionary<string, Thing> ThingCache = new Dictionary<string, Thing>();
private Thing myThing;
public Foo(string name) {
if (ThingCache.ContainsKey(name)) {
this(ThingCache[name]);
} else {
this(ExternalStaticFactory.GetThing(name));
ThingCache.Add(name, myThing);
}
}
public Foo(Thing tmpThing) {
doSomeStuff();
myThing = tmpThing;
doSomeOtherStuff();
}
}
这在 VB .Net 中是可能的,但 C# 不允许我在另一个构造函数的中间调用构造函数 - 仅在开始时使用 Foo() : this() 语法。
所以我的问题是,链接构造函数时如何控制构造函数调用的顺序,而不是使用冒号语法,只能先调用另一个构造函数?