【问题标题】:Compute a value for a base constructor AND access that value afterwards?计算基本构造函数的值并在之后访问该值?
【发布时间】:2020-02-21 17:24:09
【问题描述】:

在下面的代码sn-p中:

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

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

有什么方法可以避免两次调用ComputeSomethingExpensive(例如,为静态计算的基类参数创建一个标识符) - 假设基类没有将提供的参数“存储”在任何可访问的成员中?

【问题讨论】:

    标签: c# inheritance constructor


    【解决方案1】:

    啊,我刚想到这个——创建第二个构造函数:

    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

    【讨论】:

    • 我正要发布同样的内容。很高兴你知道了!
    • 这不会编译。
    • @TanveerBadar 如果您实现了可能显而易见的周边类、本地成员和“一些昂贵的”代码,它就可以了。见这里:dotnetfiddle.net/QNNilB
    • 私有构造函数中存在拼写错误导致编译器错误。
    猜你喜欢
    • 2017-07-30
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2012-01-02
    相关资源
    最近更新 更多