.NET框架中的CLR与IL:C#教程

需积分: 6 1 下载量 178 浏览量 更新于2024-08-19 收藏 5.21MB PPT 举报
"C#教程文档中的输出参数-out以及.NET框架中的CLR和IL概念" 在C#编程中,`out`是一个关键字,用于定义方法参数的调用方式。它允许方法将值传出,即方法能够初始化并返回一个参数的值,而无需在调用方法之前对参数进行初始化。`out`参数在调用时必须显式声明,这意味着你不能省略它,即使没有赋初值。这种方法参数的使用方式与`ref`关键字类似,但`ref`要求在调用方法前必须赋值。 在.NET框架中,编译后的C#代码并不直接转换为机器码,而是转化为中间语言(IL,Intermediate Language),也称为Microsoft中间语言(MSIL)。IL是一种平台无关的指令集,使得不同的.NET语言(如C#、VB.NET、F#等)编译后的代码可以在相同的环境中执行。IL提供了语言互操作性,因为所有.NET语言最终都会被编译成IL,然后在运行时通过公共语言运行库(CLR,Common Language Runtime)进行即时(JIT,Just-In-Time)编译为特定平台的机器码。 CLR是.NET框架的核心组成部分,它充当了一个虚拟机的角色,负责管理和执行IL代码。除了JIT编译,CLR还提供了内存管理(包括垃圾回收)、类型安全、异常处理和安全性控制等功能。这使得.NET程序员可以专注于编写代码,而不必担心底层的系统细节。此外,CLR通过统一的运行时环境,使得不同语言编写的组件和对象能够无缝地交互。 在.NET框架下,内存管理是自动的,由CLR的垃圾收集机制处理。当不再有引用指向一个对象时,垃圾收集器会自动释放该对象占用的内存,避免内存泄漏。这与传统的C++等语言不同,程序员无需手动管理内存分配和释放。 在跨语言交互方面,CLR提供了一种机制,使得VB.NET编写的组件可以被C#或其他.NET语言使用,反之亦然。这种互操作性极大地提高了开发效率和代码复用性。 字符串处理是.NET框架中的一个重要部分。C#中的`Format()`方法是处理字符串的常用工具,它允许使用占位符和参数列表来构建复杂的字符串。例如,`string result = string.Format("Today is {0}", DateTime.Now)`,这里的`{0}`就是一个占位符,`DateTime.Now`是对应的参数,方法会将当前日期和时间替换到字符串中。 简单工厂模式是一种设计模式,它在创建对象时起到隔离具体类和客户端代码的作用。然而,该模式的一个缺点是,如果需要添加新的产品类,就需要修改工厂类,这违背了开闭原则(对扩展开放,对修改关闭)。在.NET框架中,通常会结合接口和反射等技术来改进这种模式,以提高代码的灵活性和可维护性。 C#中的`out`关键字、.NET框架的IL和CLR,以及字符串处理和设计模式的应用,都是开发者在进行.NET开发时需要掌握的关键知识点。理解和熟练运用这些概念,能够帮助开发者更高效、更灵活地编写和管理代码。

转c#写法:#!/bin/sh time_stamp=`date +%s` function CheckStop() { if [ $? -ne 0 ]; then echo "execute fail, error on line_no:"$1" exit!!!" exit fi } function GenEcdsaKey() { ec_param_file_path="/tmp/ec_param.pem."$time_stamp openssl ecparam -out $ec_param_file_path -name prime256v1 -genkey CheckStop $LINENO openssl genpkey -paramfile $ec_param_file_path -out $1 CheckStop $LINENO openssl pkey -in $1 -inform PEM -out $2 -outform PEM -pubout CheckStop $LINENO rm $ec_param_file_path echo "gen_ecdsa_key succ prikey_path:"$1" pubkey_path:"$2 } function GenEcdsaSign() { ec_sign_info_file="/tmp/ec_sign_info_file."$time_stamp ec_sign_info_sha256="/tmp/ec_sign_info_sha256."$time_stamp ec_binary_sign_file="/tmp/ec_binary_sign_file."$time_stamp echo -n "$1"_"$2" > $ec_sign_info_file openssl dgst -sha256 -binary -out $ec_sign_info_sha256 $ec_sign_info_file CheckStop $LINENO openssl pkeyutl -sign -in $ec_sign_info_sha256 -out $ec_binary_sign_file -inkey $3 -keyform PEM CheckStop $LINENO openssl base64 -e -in $ec_binary_sign_file -out $4 CheckStop $LINENO rm $ec_sign_info_file $ec_sign_info_sha256 $ec_binary_sign_file echo "gen_ecdsa_sign succ sign_file_path:"$4 } function VerifyEcdsaSign() { ec_sign_info_file="/tmp/ec_sign_info_file."$time_stamp ec_sign_info_sha256="/tmp/ec_sign_info_sha256."$time_stamp ec_binary_sign_file="/tmp/ec_binary_sign_file."$time_stamp echo -n "$1"_"$2" > $ec_sign_info_file openssl dgst -sha256 -binary -out $ec_sign_info_sha256 $ec_sign_info_file CheckStop $LINENO openssl base64 -d -in $4 -out $ec_binary_sign_file CheckStop $LINENO openssl pkeyutl -verify -in $ec_sign_info_sha256 -sigfile $ec_binary_sign_file -pubin -inkey $3 -keyform PEM rm $ec_sign_info_file $ec_sign_info_sha256 $ec_binary_sign_file } function Usage() { echo "Usage:" echo "mmiot_ecdsa_sign.sh gen_ecdsa_key <private_key_file_path> <public_key_file_path>" echo "mmiot_ecdsa_sign.sh gen_ecdsa_sign <product_id> <sn> <private_

2023-05-31 上传