Calculation caching experiment
Operator-free version (answer to...your answer):

public static class Analysis
{
    public static readonly Lazy&lt;double&gt; n10 = new Lazy&lt;double&gt;(() =&gt; F(10));

    private double static F(int n)
    {
        return n &lt;= 1 ? 1 : n * F(n - 1);
    }
}


Do not look at marginal style differences (I cannot get used/appreciate expression bodied functions but it's just my own problem), point I'd like to highlight is:


You do not need Once class, Framework already has a class for lazy creation of values: Lazy&lt;T&gt;. It even nicely handle thread-safety issues (safe creation and/or publication) if field is not static (in that case C# itself helps us.)


Few minor notes about current code:


Analysis class has no need to be instantiable and all methods can be static.
Class itself can then be static.
IMO you do not need a dictionary, first of all because of the performance impact (even if it's a concurrent collection without locks) but also because it limits its usage to static methods (you use MethodInfo as key).


I understand your point of view (C# syntax isn't so clean to be used for business logic) but instead of forcing syntax and change operators semantic I'd prefer to use another language. Boo was first that came to my mind (especially because to change and extend the language to have a DSL is incredibly easy). I used it few years ago then I'm not up-to-date with its evolution. There are also other tools (second thought if for Microsoft Modeling SDK if you like visual editors instead of plain text code)