Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

197
Vistas
¿Por qué declarar una función local estática en C# 8.0?

En C# 8.0, se anuncian funciones locales estáticas

¿Alguien puede ayudarme a aclararme por qué querría declarar una función local como estática?

La razón dada en el artículo:

para garantizar que la función local no capture (haga referencia) a ninguna variable del ámbito adjunto

Pero:

  1. No entiendo por qué querrías asegurar eso.
  2. ¿Hay alguna otra razón o beneficio para declararlo estático? (rendimiento tal vez?)

El código de ejemplo dado en el artículo es:

 int M() { int y = 5; int x = 7; return Add(x, y); static int Add(int left, int right) => left + right; }
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

No entiendo por qué querrías asegurar eso.

Porque evita que te dispares en el pie. Obliga a la función local a ser una función pura que no modifica el estado de la persona que llama.

Esto devuelve false , porque la función modifica las variables locales de su llamador:

 public bool Is42() { int i = 42; Foo(); return i == 42; void Foo() { i = 21; } }

Y esto no, porque ni siquiera compila:

 public bool Is42() { int i = 42; Foo(); return i == 42; static void Foo() { i = 21; } }

Evita sorpresas. Por supuesto, en estos ejemplos simples, el beneficio no es claro de inmediato, porque "bueno, es obvio que Foo() modifica i " , pero en bases de código más grandes mantenidas por varias personas y no cubiertas adecuadamente por pruebas unitarias, este simple modificador evita problemas.

over 4 years ago · Santiago Trujillo Denunciar

0

La captura de variables tiene un pequeño costo adicional, ya que generará un tipo de uso interno en el que las variables capturadas son campos públicos. Considere un ejemplo ligeramente modificado:

 int M() { int y = 5; int x = 7; return Add(); int Add() => x + y; }

En realidad se traducirá a algo como esto:

 int M() { int y = 5; int x = 7; var capturedVars = new <>c__DisplayClass0_0 { x = x, y = y }; return <M>g__Add|0_0(ref capturedVars); } [CompilerGenerated] private struct <>c__DisplayClass0_0 { public int x; public int y; } [CompilerGenerated] internal static int <M>g__Add|0_0(ref <>c__DisplayClass0_0 class_Ref1) => (class_Ref1.x + class_Ref1.y);
over 4 years ago · Santiago Trujillo Denunciar

0

Esta respuesta de CodeCaster y esta respuesta separada de György Kőszeg responden individualmente diferentes partes de mi pregunta, por lo que las estoy reuniendo para formar una imagen completa de la respuesta aceptada:

Para la Parte 1) de mi pregunta, @CodeCaster dice:

Porque evita que te dispares en el pie. Obliga a la función local a ser una función pura que no modifica el estado de la persona que llama .

en bases de código más grandes mantenidas por varias personas y no cubiertas adecuadamente por pruebas unitarias, este simple modificador evita problemas

Entonces, la respuesta 1 es: las funciones locales estáticas garantizan un estado confiable del método de la persona que llama.

Para la Parte 2) de mi pregunta, @György Kőszeg dice:

La captura de variables tiene un pequeño costo adicional, ya que generará un tipo de uso interno en el que las variables capturadas son campos públicos.

Y continúa dando un ejemplo del código compilador producido a través de reflector.

Entonces, la respuesta 2 es: las funciones locales estáticas evitan la captura de variables. La captura de variables tiene un costo pequeño. Por lo tanto, hay un pequeño aumento de rendimiento al declarar la función local estática

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda