Odpowiedź na Twoje pytanie brzmi tak i nie, w zależności od tego, co rozumiesz przez „funkcję inline”. Jeśli używasz terminu tak, jak jest on używany w programowaniu w C ++, odpowiedź brzmi: nie, nie możesz tego zrobić - nawet wyrażenie lambda jest wywołaniem funkcji. Chociaż prawdą jest, że można zdefiniować wbudowane wyrażenia lambda, aby zastąpić deklaracje funkcji w C #, kompilator nadal tworzy anonimową funkcję.
Oto naprawdę prosty kod, którego użyłem do przetestowania tego (VS2015):
static void Main(string[] args)
{
Func<int, int> incr = a => a + 1;
Console.WriteLine($"P1 = {incr(5)}");
}
Co generuje kompilator? Użyłem sprytnego narzędzia o nazwie ILSpy, które pokazuje rzeczywisty wygenerowany zestaw IL. Spójrz (pominąłem wiele rzeczy związanych z konfiguracją klas)
To jest główna funkcja:
IL_001f: stloc.0
IL_0020: ldstr "P1 = {0}"
IL_0025: ldloc.0
IL_0026: ldc.i4.5
IL_0027: callvirt instance !1 class [mscorlib]System.Func`2<int32, int32>::Invoke(!0)
IL_002c: box [mscorlib]System.Int32
IL_0031: call string [mscorlib]System.String::Format(string, object)
IL_0036: call void [mscorlib]System.Console::WriteLine(string)
IL_003b: ret
Widzisz te linie IL_0026 i IL_0027? Te dwie instrukcje ładują liczbę 5 i wywołują funkcję. Następnie sformatuj IL_0031 i IL_0036 i wydrukuj wynik.
A oto funkcja o nazwie:
.method assembly hidebysig
instance int32 '<Main>b__0_0' (
int32 a
) cil managed
{
.maxstack 8
IL_0000: ldarg.1
IL_0001: ldc.i4.1
IL_0002: add
IL_0003: ret
}
To naprawdę krótka funkcja, ale jest to funkcja.
Czy warto to zoptymalizować? Nie. Może, jeśli wywołujesz to tysiące razy na sekundę, ale jeśli wydajność jest tak ważna, powinieneś rozważyć wywołanie kodu natywnego napisanego w C / C ++, aby wykonać tę pracę.
Z mojego doświadczenia wynika, że czytelność i łatwość konserwacji są prawie zawsze ważniejsze niż optymalizacja na kilka mikrosekund przyspieszenia. Użyj funkcji, aby uczynić swój kod czytelnym i kontrolować zakres zmiennych i nie martw się o wydajność.
„Przedwczesna optymalizacja jest źródłem wszelkiego zła (a przynajmniej większości) w programowaniu”. - Donald Knuth
„Program, który nie działa poprawnie, nie musi działać szybko” - Ja