La palabra clave extern en C#

Muhammad Zeeshan 12 octubre 2023
  1. extern en C#
  2. Cómo funciona extern en C#
La palabra clave extern en C#

En el artículo de hoy, aprenderemos la funcionalidad de la palabra clave extern en C#.

extern en C#

La declaración de un método implementado externamente se realiza mediante el modificador extern. Cuando se utilizan servicios Interop para llamar a código no administrado, el modificador extern se usa a menudo junto con el atributo DllImport.

Es necesario definir el método como static en esta situación.

La palabra clave extern también se puede usar para construir un alias de ensamblaje externo, lo que permite hacer referencia a varias versiones del mismo componente dentro de un solo ensamblaje.

Es inaceptable alterar un solo miembro utilizando simultáneamente los modificadores abstract y extern. Cuando usa el modificador abstract, indica que la implementación del método no se proporciona en la clase, en contraste con cuando usa el modificador extern, que sugiere que la implementación del método se encuentra fuera del código C#.

Cómo funciona extern en C#

Se acuerda que un método se considera un método externo si su declaración contiene el modificador extern. La implementación de métodos externos suele tener lugar fuera de C# y utiliza un lenguaje de programación diferente.

Dado que la declaración de un método externo no incluye ninguna implementación real, el cuerpo del método de un método externo se compone de un solo punto y coma. Existe la posibilidad de que un método exterior no sea genérico.

El modificador extern se usa a menudo junto con una propiedad DllImport. Esta combinación permite que Dynamic Link Libraries o DLLs incorporen métodos de módulos externos.

Existe la posibilidad de que el entorno de ejecución admita técnicas adicionales que permitan ofrecer implementaciones de métodos externos. Cuando un método externo tiene una propiedad DllImport, la declaración del método también debe tener un modificador estático para funcionar correctamente.

Sintaxis:

[DllImport("avifil32.dll")]
private static extern void AVIFileInit();

Ejemplo:

En este ejemplo, podemos utilizar los alias extern para importar funcionalidad y luego utilizar esa funcionalidad según convenga.

Un solo nombre completamente calificado puede referirse a dos tipos cuando se utiliza un alias externo. Cuando dos entidades tienen el mismo nombre totalmente calificado, la indicación del namespace y el tipo names son iguales.

Esto es algo que solo puede ocurrir cuando los dos tipos se originan a partir de dos ensamblajes separados.

  1. Primera librería compilada a info1.dll

    namespace information {
      public class info {}
    }
    
  2. Segunda librería compilada a info2.dll

    namespace information {
      public class info {}
    }
    
  3. El siguiente es un ejemplo de una aplicación que utiliza los archivos info1.dll e info2.dll.

    using info;
    class Test {
      static void Main() {
        information i = new information();
      }
    }
    
  1. Por falta de claridad en la information, no se puede compilar la solicitud. En esta situación, la incertidumbre se puede despejar utilizando alias extern.

    Primero debe cambiar el archivo .csproj que usa la aplicación y darle a cada referencia su alias distinto.

    <ItemGroup>
    <Reference Include="info1">
    <Aliases>i1</Aliases>
    </Reference>
    <Reference Include="info2">
    <Aliases>i2</Aliases>
    </Reference>
    </ItemGroup>
    
  2. Utilice la directiva de alias extern como último paso del proceso.

    extern alias i1;
    extern alias i2;
    
    class Test {
      static void Main() {
        i1.information.info first = new i1.information.info();
        i2.information.info second = new i2.information.info();
      }
    }
    
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.

LinkedIn