I agree with the syntax issues. TypeScript has type aliases where you can name a union of types for example. .NET cod use something similar.
That said, some of the most flexible aspects of .net and many popular libraries rely on Action and Func under the covers. Thankfully the syntax to invole a lambda expression is cleaner than the parameter signature definition.
You can use delegates or functional interfaces to have alias.
A functional interface is an interface with only one method, as suggested above.
With the delegate, you can have:
public delegate decimal CalculateScore();
This is totally compatible with Lambdas and Funcs. And a safe way to do a Strategy Pattern like you want.
Yah, definitely didn't want it to seem like I dislike them or avoid them.
I tend to use them for internal APIs and infrastructure code - less so for business logic service methods.
I just saw on Twitter today that someone is actively championing discriminated unions for C# 9 😁:
@isaac_abraham @vkornov @jaredpar @eric_sink @k_cieslak @shanselman @terrajobst Discriminated unions, with completeness checking, are championed by me and scheduled for C# 9
18:30 PM - 15 Sep 2019
Both TypeScript's and F#'s allowance of not explicitly typing params and return types helps reduce that function + generic noise.
We could do the aliasing with C# named delegates, but then we are kinda just trading one noise for another (with more type limitations).
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.