Вычислить значение для базового конструктора И получить к нему доступ впоследствии? - PullRequest
0 голосов
/ 21 февраля 2020

В следующем фрагменте кода:

public MyClass(string arg) : base(ComputeSomethingExpensive(arg))
{
    this.OriginalArg = arg;
    this.SomethingExpensive = ComputeSomethingExpensive(arg);
}

private static object ComputeSomethingExpensive(string arg) => // something expensive

Есть ли способ избежать двух вызовов ComputeSomethingExpensive (например, создать идентификатор для статически вычисляемого аргумента базового класса) - предполагая, что базовый класс не делает ' t "хранить" предоставленный аргумент в любых доступных членах?

1 Ответ

1 голос
/ 21 февраля 2020

Ааа, я только что подумал - создайте второй конструктор:

public MyClass(string arg) : this(ComputeSomethingExpensive(arg))
{
    this.OriginalArg = arg;
}

private MyClass(object somethingExpensive) : base(somethingExpensive)
{
    this.SomethingExpensive = somethingExpensive;
}

private static object ComputeSomethingExpensive(string arg) => // something expensive

Надеюсь, это поможет кому-то еще.

Пример реализации : https://dotnetfiddle.net/QNNilB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...