La respuesta a su pregunta es sí y no, dependiendo de lo que entendemos por "función en línea". Si está utilizando el término como se usa en el desarrollo de C++, entonces la respuesta es no, no puede hacer eso, incluso una expresión lambda es una llamada a función. Si bien es cierto que puede definir expresiones lambda en línea para reemplazar declaraciones de funciones en C#, el compilador aún termina creando una función anónima.
Aquí hay un código muy simple que utiliza para probar esto (VS2015):
static void Main(string[] args)
{
Func<int, int> incr = a => a + 1;
Console.WriteLine($"P1 = {incr(5)}");
}
Lo que genera el compilador? Utilicé una herramienta ingeniosa llamada ILSpy que muestra el ensamblaje de IL real generado.Echar un vistazo (he omitido muchas cosas configuración de clase)
Ésta es la función principal:
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
ver esas líneas IL_0026 y IL_0027? Esas dos instrucciones cargan el número 5 y llaman a una función. Luego, formatee IL_0031 e IL_0036 e imprima el resultado.
Y aquí es la función llamada:
.method assembly hidebysig
instance int32 '<Main>b__0_0' (
int32 a
) cil managed
{
// Method begins at RVA 0x20ac
// Code size 4 (0x4)
.maxstack 8
IL_0000: ldarg.1
IL_0001: ldc.i4.1
IL_0002: add
IL_0003: ret
} // end of method '<>c'::'<Main>b__0_0'
Es una función muy corto, pero es una función.
¿Vale la pena hacer un esfuerzo para optimizar? Nah. Tal vez si lo está llamando miles de veces por segundo, pero si el rendimiento es tan importante, entonces debería considerar llamar al código nativo escrito en C/C++ para hacer el trabajo.
En mi experiencia, la capacidad de lectura y la facilidad de mantenimiento son casi siempre más importantes que la optimización de unos pocos microsegundos para ganar velocidad. Use funciones para hacer que su código sea legible y para controlar el alcance de las variables y no se preocupe por el rendimiento.
"La optimización prematura es la raíz de todos los males (o al menos la mayoría) en la programación." - Donald Knuth
"Un programa que no se ejecuta correctamente no tiene que correr rápido" - Me
No se prohíba crear una función simplemente porque no se llamará desde ningún otro lugar. Las funciones también se pueden usar para limpiar el código (si tiene un procedimiento grande que abarca varias páginas, dividirlo en funciones lo hace más legible) y autoeditarlo (simplemente nombrar una función correctamente puede transmitir información al lector). – Joe
Si vino aquí desde Google y desea saber cómo emular las funciones en línea en C#, vaya aquí: https://stackoverflow.com/questions/473782/inline-functions-in-c Las respuestas a continuación no se refieren a funciones "en línea" en el verdadero sentido de la palabra, y C# ni siquiera tiene funciones en línea verdaderas, pero el enlace anterior proporciona una optimización del compilador que se puede usar. – James