una tipos objeto metodos metodo instancias instanciar inicializar estaticos ejemplos declaracion constructores clases clase c# constructor static extern language-specifications

tipos - metodos estaticos c#



¿Cuál es el propósito de los constructores estáticos externos en C#? (1)

Desde MSDN:

Cuando una declaración de constructor incluye un modificador extern, se dice que el constructor es un constructor externo. Debido a que una declaración de constructor externo no proporciona una implementación real, su cuerpo constructor consiste en un punto y coma.

...

Parece que no podemos pensar en una buena razón para usar esta declaración y es cierto. Pero cuando profundizas más, te das cuenta de que hay todo un mundo de ensamblaje dinámico o - Generación de código.

Si tuviera que desarrollar un compilador para la plataforma .NET, probablemente necesitará algunas soluciones de trucos como lo hace el uso del compilador de C #. Puedo darme cuenta de que algunas implementaciones centrales usan un constructor externo que se implementa en otro lugar por buenas razones de diseño.

De acuerdo con la sección "10.12 constructores estáticos" de "C # Language Specification. Version 5.0", el constructor estático se puede marcar con el modificador "extern" y en este caso se dice que es un constructor estático externo .

Los constructores estáticos ordinarios (no externos) son bien conocidos. Se usan para inicializar campos y propiedades estáticos.

Los métodos estáticos externos a menudo se usan para llamar a funciones nativas a través de P / Invoke.

Y también conozco constructores externos bastante esotéricos (véase también esta pregunta ). Por ejemplo, String clase String tiene varias de estas declaraciones , estos constructores son implementados por el tiempo de ejecución.

Pero, ¿hay algún uso real de constructores estáticos externos? He buscado en el repositorio coreclr y no encontré nada. La especificación del lenguaje no podía dar una descripción de alguna construcción que nunca se haya usado en la naturaleza. O podría?

Mi suposición: C # tiene constructores estáticos externos solo porque CLR los admite (en principio).