迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

C# 中的 extern 关键字

作者:迹忆客 最近更新:2024/01/16 浏览次数:

在今天的文章中,我们将学习 C# 中 extern 关键字的功能。


C# 中的 extern 关键字

使用 extern 修饰符声明外部实现的方法。当利用 Interop 服务调用非托管代码时,extern 修饰符通常与 DllImport 属性一起使用。

在这种情况下,有必要将方法定义为静态

extern 关键字也可用于构造外部程序集别名,允许在单个程序集中引用同一组件的多个版本。

同时使用 abstractextern 修饰符来更改单个成员是不可接受的。当你使用 abstract 修饰符时,它表示方法实现未在类中提供,而当你使用 extern 修饰符时,这表明方法实现位于 C# 代码之外。


extern 如何在 C# 中工作

如果方法的声明包含 extern 修饰符,则同意将其视为外部方法。外部方法的实现通常发生在 C# 之外并使用不同的编程语言。

由于外部方法声明不包括任何实际实现,因此外部方法的方法体包含单个分号。外部方法可能不是通用的。

extern 修饰符通常与 DllImport 属性结合使用。这种组合允许 Dynamic Link LibrariesDLLs 合并来自外部模块的方法。

执行环境有可能支持其他技术,从而可以提供外部方法的实现。当外部方法具有 DllImport 属性时,方法声明还必须具有 static 修饰符才能正常运行。

语法:

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

例子:

在这个例子中,我们可以使用 extern 别名来导入功能,然后适当地使用该功能。

使用外部别名时,单个完全限定名称可能引用两种类型。当两个实体具有相同的完全限定名称时,表明 namespace 和类型 names 是相同的。

只有当这两种类型来自两个单独的程序集时,才会发生这种情况。

  1. 第一个编译成 info1.dll 的库

    namespace information {
      public class info {}
    }
    
  2. 第二个库编译为 info2.dll

    namespace information {
      public class info {}
    }
    
  3. 以下是使用 info1.dllinfo2.dll 文件的应用程序示例。

    using info;
    class Test {
      static void Main() {
        information i = new information();
      }
    }
    
  1. 由于 information 不清晰,无法编译应用程序。在这种情况下,可以使用 extern 别名来清除不确定性。

    你首先需要更改应用程序使用的 .csproj 文件,并为每个引用指定其不同的别名

    <ItemGroup>
    <Reference Include="info1">
    <Aliases>i1</Aliases>
    </Reference>
    <Reference Include="info2">
    <Aliases>i2</Aliases>
    </Reference>
    </ItemGroup>
    
  2. 使用 extern 别名指令作为该过程的最后一步。

    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();
      }
    }
    

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

C# 中的异常列表

发布时间:2024/01/20 浏览次数:128 分类:编程语言

我们将查看本文中可能引发的 C# 异常。System Exception 类是 C# 编程语言中预定义的异常类,可用于编程。选择代码中可能出现的异常并将其插入到适当的 catch 块中。

C# 将 Int 转换为 Char

发布时间:2024/01/20 浏览次数:137 分类:编程语言

本教程教授如何在 C# 中将 int 转换为 char。在 C# 中使用显式类型转换 Char 将 Int 转换为 Char

在 C# 中创建泛型函数

发布时间:2024/01/20 浏览次数:186 分类:编程语言

我们可以使用类型 T 在 C# 中声明一个泛型数据类型。它既可以用作函数返回类型,也可以用作函数参数的数据类型。

在 C# 中按值对字典排序

发布时间:2024/01/19 浏览次数:153 分类:编程语言

有两种主要方法可用于按 C# 中的值对字典进行排序:list 方法和 Linq 方法。使用 C# 中的 List 方法按值对字典进行排序。C# 字典数据结构以 key:value 对的形式存储数据。

在 C# 中更新字典值

发布时间:2024/01/19 浏览次数:72 分类:编程语言

本教程演示如何使用键作为索引来更新 C# 字典中的值。dictionary 是一种集合类型,与只能通过索引或值本身访问值的数组或列表不同,字典使用键和值对来存储其数据。

在 C# 中检查字典键是否存在

发布时间:2024/01/19 浏览次数:142 分类:编程语言

本文教我们如何检查或检测 C# 中是否存在字典键。Dictionary 倾向于映射键和值。它包含特定值映射到的特定键。不允许有重复的键,这是字典的全部目标。

C# 中的字典与哈希表

发布时间:2024/01/19 浏览次数:166 分类:编程语言

本指南将讨论 C# 中 Dictionary 和 Hashtable 之间的区别。你应该更喜欢哪一个?本指南将讨论 C# 中 Dictionary 和 Hashtable 之间的区别。

C# 将对象转换为 JSON 字符串

发布时间:2024/01/19 浏览次数:157 分类:编程语言

本文介绍如何将 C# 对象转换为 C# 中的 JSON 字符串的不同方法。它介绍了 JavaScriptSerializer().Serialize(),JsonConvert.SerializeObject()和 JObject.FromObject()之类的方法。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便