C#入门:理解.out参数与.NET Framework

需积分: 6 2 下载量 22 浏览量 更新于2024-08-19 收藏 4.81MB PPT 举报
"C#是一种由Microsoft开发的面向对象的编程语言,旨在提供快速开发能力并能充分利用.NET Framework的潜能。它结合了C/C++的灵活性和VB的高效性,为程序员提供了一个既能进行底层操作又能适应现代网络编程需求的环境。C#的主要特点包括其面向对象的特性、与.NET Framework的紧密集成以及对底层功能的访问能力。" 在深入探讨C#的输出参数`-out`之前,我们先简单回顾一下.NET Framework的基础。.NET Framework是一个由Microsoft开发的软件框架,它包含了运行时环境(Common Language Runtime, CLR)和一组类库,支持多种编程语言的开发。CLR负责JIT(Just-In-Time)编译,即将源代码编译成中间语言(MSIL)并在运行时转换为机器码。CTS(Common Type System)确保不同语言间的类型兼容性。 C#中的`out`关键字是用于方法调用的一个特殊参数修饰符,它允许方法将值返回给调用者。与常规的返回值不同,`out`参数必须在方法内部被赋值,并且在调用方法时,实参不必预先初始化。这意味着`out`参数在方法调用时可以是未定义的,而在方法返回后,调用者可以使用该参数获取方法提供的值。 以下是一个简单的`out`参数使用示例: ```csharp public void GetMinMax(int[] numbers, out int min, out int max) { min = numbers[0]; max = numbers[0]; for (int i = 1; i < numbers.Length; i++) { if (numbers[i] < min) min = numbers[i]; else if (numbers[i] > max) max = numbers[i]; } } int[] array = { 5, 3, 8, 1, 9 }; GetMinMax(array, out int minValue, out int maxValue); Console.WriteLine($"Minimum value: {minValue}, Maximum value: {maxValue}"); ``` 在这个例子中,`GetMinMax`方法通过`out`参数`min`和`max`返回数组中的最小值和最大值。在调用方法时,`min`和`max`没有被初始化,但在方法内部被赋值。当方法执行完毕,这两个`out`参数就有了有效的值,可以被外部代码使用。 C#的`out`参数常用于需要返回多个值的情况,或者当一个方法需要改变传入的变量状态时。然而,需要注意的是,由于`out`参数不需要在调用时初始化,因此开发者需要确保方法内部确实为其分配了值,否则可能导致未定义的行为。 C#的`out`关键字是其语言特性的一部分,它提供了一种灵活的方式来进行参数传递,尤其是在需要返回多个值或改变调用者变量状态的情况下。学习和理解`out`参数是掌握C#编程的关键步骤,特别是在进行方法设计和调用时。

转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 上传