C#中的参数传递

简介:

 方法的参数传递机制:
  1.值参数 (Value Parameter)
   方法名称 ( 参数类型 参数名称[,参数类型 参数名称] )
  2.引用参数 (Reference Paramter)
   方法名称 ( ref 参数类型 参数名称 [,ref 参数类型 参数名称] ) 
  3.输出参数 (Out Paramter) 
   方法名称 ( out 参数类型 参数名称[,out 参数类型 参数名称] )

输出参数和引用参数的区别:

   从CLR的角度看,关键字out和关键字ref是等效的,也就是说,无论使用哪个关键字,都会生成相同的元数据和IL代码.但是C#编译器将两个关键字区别对待,在c#中,这两个关键字的区别在于哪个方法负责初始化引用对象.
 
   <1>若是使用的out关键字,那么调用者不希望在调用方法之前初始化对象,被调用的方法不能读取对象的值,而且被调用的方法必须在返回之前为对象赋值.
   <2>若是使用的ref关键字,那么调用者必须在调用方法之前首先初始化参数的值,被调用的方法可以读取参数或为参数赋值.

例:

1.值参数、引用参数、输出参数的方法调用:
using System; class Methord { public static void ValueMethord(int i) //值参数的调用 { i++; } public static void ReferenceMethord(ref int i) //引用参数的调用 { i++; } public static void OutMethord(out int i) //输出参数的调用 { i=0; //注意:必须将局部变量i初始化 i++; } static void Main() { int i=0; ValueMethord(i); Console.WriteLine("i="+i); int j=0; //注意:必须在此将局部变量j初始化,而不是在引用参数的调用时 ReferenceMethord(ref j); Console.WriteLine("j="+j); int k=0; OutMethord(out k); Console.WriteLine("k="+k); } }

2.向方法传递可变数量的参数:使用params关键字
using System; class Methord { static int addi(params int[] valuse) //注意:params关键字后面必须是接一个数组型变量 { int sum=0; foreach(int i in valuse) //遍历数组中的每一个元素,然后求出其和的值 sum+=i; return sum; } static void Main() { Console.WriteLine (addi(1,2,3)); } }

 3.对比值类型和引用类型:

                              值类型                             引用类型
 
 变量中存放的       真正的数据                       指向数据的引用指针
  
 内存空间分配       堆栈(Stack)                      托管堆(Managed Heap)

 内存需求            一般较小                             较大

 执行效能              较快                               较慢
 
 内存释放时间点    执行超过定义变量的作用域          由回收站负责回收

 可以为null         不可以为null                          可以为null

目录
相关文章
|
3月前
|
C#
C#的方法的参数传递
C#的方法的参数传递
37 0
|
C# C++
C#调用C/C++ DLL 参数传递和回调函数的总结
原文:C#调用C/C++ DLL 参数传递和回调函数的总结 Int型传入: Dll端: extern "C" __declspec(dllexport) int Add(int a, int b) ...
5775 0
C# List 作为参数传递的值变化
一、示例演示 namespace TestConsole { class Program { static void Main(string[] args) { Console.
1396 0
|
C# Windows 数据库
C# 多线程参数传递
1、通过实体类来传递(可以传递多个参数与获取返回值),demo如下: 需要在线程中调用的函数: namespace ThreadParameterDemo { public class FunctionClass { public static string TestFunction(string name, int age) {
1183 0
|
消息中间件 API C#
在C#中SendMessage和PostMessage的参数传递
本文源码下载地址:http://download.csdn.net/detail/testcs_dn/5152868 在C#中可以使用Window API提供的SendMessage和PostMessage来传递参数。
1717 0
|
2月前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
45 3