Я хочу знать, как изменить порядок выполнения при объединении конструкторов в 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 ().
Итак, мой вопрос в том, как можно контролировать порядок вызова конструктора при объединении конструкторов в цепочку, а не используя синтаксис двоеточия, который может сначала вызвать только другой конструктор?