C#中多语言编程原理及实例解析

文章目录

  • 一、了解C#多语言编程原理
      • [1. 通用语言运行库(CLR)](#1. 通用语言运行库(CLR))
      • [2. 通用类型系统(CTS)](#2. 通用类型系统(CTS))
      • [3. 微软中间语言(MSIL)](#3. 微软中间语言(MSIL))
      • [4. 元数据和反射](#4. 元数据和反射)
      • [5. 公共语言规范(CLS)](#5. 公共语言规范(CLS))
  • 二、实例说明

一、了解C#多语言编程原理

C#中的多语言编程主要是依托于.NET框架的语言互操作性(language interoperability)实现的,这是由几个关键的.NET框架组件共同支持的:

1. 通用语言运行库(CLR)

CLR是.NET应用程序的执行环境,它提供了内存管理、异常处理、安全性和线程管理等服务。CLR允许用不同语言编写的代码在同一环境中运行,因为所有的.NET语言都遵循CLR的规则。

2. 通用类型系统(CTS)

CTS定义了所有.NET语言共享的类型系统。这意味着用一个.NET语言定义的类型可以被另一个.NET语言所使用。例如,C#中定义的一个公共类可以被VB.NET或F#使用,因为它们都遵循CTS规则。

3. 微软中间语言(MSIL)

.NET中的所有语言在编译时都不是直接编译成机器码,而是编译成一种称为MSIL(或简称IL)的中间语言。这种中间语言是独立于特定硬件和操作系统平台的。当.NET程序运行时,CLR的即时编译器(JIT)会将MSIL编译成针对运行它的特定平台的本地机器码。

4. 元数据和反射

.NET编译器在编译过程中会在生成的程序集中包含丰富的元数据,描述代码的结构,如类型定义和成员声明等。通过反射API,程序可以在运行时查询和访问这些元数据,从而实现不同语言编写的代码之间的互操作。

5. 公共语言规范(CLS)

CLS是一个指导开发者如何编写.NET语言之间可互操作代码的规范。它指出了一组规则,如果遵循这些规则编写.NET应用程序,那么这个程序就可以在所有遵循CLS的.NET语言之间互操作。

通过这些机制,C#程序可以轻松调用由其他.NET语言(如Visual Basic .NET, F#, 和其他.NET兼容语言)编写的组件,反之亦然。这种多语言互操作性大大增强了.NET框架的强大和灵活性。
简单来考虑就是,不同的语言比如C#和VB在运行或者在程序集成之前会被编译成同一种语言------微软中间语言,这样就互通了。

二、实例说明

在看这个例子前希望大家可以先看一下这篇文章中的例子:C#程序模块的封装

比如我们创建一个这样的窗体应用程序:

一个简单的加法运行,我们创建一个VB类库用VB语言写加法程序:

把加法程序命名空间取名为 Calculator:

然后在资源管理器中右击-生成,会有一个DLL文件,然后在第一个窗体运行应用程序中添加引用,把这个VB类库名添加进去;

接着我们用C#语言写第一张图中开始计算的程序:

记着在这段程序最上面假如引用:using VB类库名称

这样就可以运行一个同时用VB和C#语言编写的程序了。

相关推荐
DevOpenClub2 小时前
职教高考控制线 API:招生类别枚举、筛选与空分数含义
java·数据库·高考
心祭丫丫2 小时前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
露天赏雪3 小时前
第3篇:Sentinel熔断降级实战:大模型接口抖动时的服务兜底方案
java·开发语言·人工智能·spring boot·spring·servlet·sentinel
天天被压力3 小时前
【A股分钟级高频数据完全手册 #06】北交所分钟级数据接口:京市股票Pro版最新分时
java·人工智能·python
天天被压力3 小时前
【A股分钟级高频数据完全手册 #05】指数历史分钟数据接口:Pro版沪深指数分时回放
java·人工智能·python
captain3763 小时前
▲统一功能——DispatcherServlet源码分析
java·spring·java-ee·log4j·maven
金銀銅鐵3 小时前
JDK 21 中 List.of 的实现细节:从 List12 到 ListN
java·后端·ai编程
yeccheng5 小时前
MySQL 索引超详解:从底层 B+ 树到面试高频考点
java·开发语言·jvm·mysql·面试
联犀5 小时前
纯 Go 的 CAD 开源库 go-cad:直接解析 DWG/DXF,现在也能导出 PDF
开发语言·golang·pdf
这个昵称不容易5 小时前
SpringBoot 读书笔记共享平台部署实战:97 个 Java 文件 / 113 个接口 / 10 张表
java·springboot·毕设