Відповідь на ваше запитання - так і ні, залежно від того, що ви маєте на увазі під "вбудованою функцією". Якщо ви використовуєте такий термін, як у розробці на C ++, тоді відповідь "ні", ви цього не можете зробити - навіть лямбда-вираз є викликом функції. Хоча це правда, що ви можете визначити вбудовані лямбда-вирази для заміни оголошень функцій у C #, компілятор все одно закінчує створенням анонімної функції.
Ось справді простий код, який я використовував для тестування (VS2015):
static void Main(string[] args)
{
Func<int, int> incr = a => a + 1;
Console.WriteLine($"P1 = {incr(5)}");
}
Що створює компілятор? Я використав чудовий інструмент під назвою ILSpy, який показує фактично створену збірку IL. Подивіться (я пропустив багато матеріалів про налаштування класу)
Це основна функція:
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
Бачите ці рядки IL_0026 та IL_0027? Ці дві інструкції завантажують число 5 і викликають функцію. Потім форматуйте IL_0031 та IL_0036 та друкуйте результат.
І ось функція, що називається:
.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
}
Це дійсно коротка функція, але це функція.
Чи варто це докладати зусиль для оптимізації? Ні Можливо, якщо ви дзвоните йому тисячі разів на секунду, але якщо продуктивність така важлива, то вам слід розглянути можливість виклику власного коду, написаного на C / C ++, щоб виконати цю роботу.
На моєму досвіді читабельність та ремонтопридатність майже завжди важливіші, ніж оптимізація швидкості на кілька мікросекунд. Використовуйте функції, щоб зробити ваш код читабельним і контролювати масштаб змінних і не турбуватися про продуктивність.
"Передчасна оптимізація - корінь усього зла (або, принаймні, більшої його частини) у програмуванні". - Дональд Кнут
"Програма, яка працює неправильно, не повинна швидко працювати" - Я