四种C#参数类型简介

开发 后端
本文介绍了C#参数类型,即值类型、引用类型、输出类型、数组型参数。

C#参数类型有四种:

值类型

引用类型

输出类型

数组型参数

C#参数类型(1):值参数

所谓值参数,就是利用值向方法传递参数时,编译程序给实参的值做一份拷贝,并将此拷贝传递给该方法,这样做的结果就是被调用的方法不会修改实参的值,保证了实际值的安全,在调用方法时,如果形参的类型时值类型的话,必须保证实参的类型也是值类型的数据.

例子:

  1. public class MyClass  
  2. {  
  3.     public MyClass()  
  4.     {  
  5.         //  
  6.         //TODO: 在此处添加构造函数逻辑  
  7.         //  
  8.     }  
  9.  
  10.  
  11.     public void ChangeValue(string value)  
  12.     {  
  13.         value = "Value is Changed!";  
  14.     }  

-------------------------------------

  1. string value = "Value";  
  2. Response.Write(value+"
    "
    );  
  3.  
  4. MyClass mc = new MyClass();  
  5. mc.ChangeValue(value);  
  6.  
  7. Response.Write(value); 

 效果:

 效果

C#参数类型(2):引用参数

使用ref关键字可以使参数按照引用传递.在需要传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中,若使用ref关键字,则在方法定义和调用方法时都必须显式使用ref关键字.

注意ref的使用!

例子:

  1. public class MyClass  
  2. {  
  3.     public MyClass()  
  4.     {  
  5.         //  
  6.         //TODO: 在此处添加构造函数逻辑  
  7.         //  
  8.     }  
  9.  
  10.  
  11.     public void ChangeValue(ref string value)  
  12.     {  
  13.         value = "Value is Changed!";  
  14.     }  

-----------------------------

  1. string value = "Value";  
  2. Response.Write(value+"
    "
    );  
  3.  
  4. MyClass mc = new MyClass();  
  5. mc.ChangeValue(ref value);  
  6.  
  7. Response.Write(value); 

效果:

效果 

C#参数类型(3):输出参数

使用out关键字来进行引用传递,这和ref关键字很累世,不同之处在于ref要求变量必须在传递之前就进行初始化,若使用out关键字,则方法定义和调用时都必须显式的使用out关键字.

例子:

  1. public class MyClass  
  2. {  
  3.     public MyClass()  
  4.     {  
  5.         //  
  6.         //TODO: 在此处添加构造函数逻辑  
  7.         //  
  8.     }  
  9.  
  10.  
  11.     public void ChangeValue(out string value)  
  12.     {  
  13.         value = "Value is Changed!";  
  14.     }  

---------------------------------

  1. string value ;  
  2.  
  3. MyClass mc = new MyClass();  
  4. mc.ChangeValue(out value);  
  5.  
  6. Response.Write(value); 

效果:

 效果

C#参数类型(4):数组型参数

数组型参数就是声明params关键字,用于指定在参数数目可变处采用参数的方法参数.

在方法声明中的params关键字之后不允许任何其他参数,并且在方法声明中只允许一个params关键字.

例子:

  1. public class MyClass  
  2. {  
  3.     public MyClass()  
  4.     {  
  5.         //  
  6.         //TODO: 在此处添加构造函数逻辑  
  7.         //  
  8.     }  
  9.  
  10.  
  11.     public void ChangeValue(params string[] value)  
  12.     {  
  13.         foreach (string s in value)  
  14.         {  
  15.             HttpContext.Current.Response.Write(s + "
    "
    );  
  16.         }  
  17.     }  

------------------------------------------

  1. string value1 = "Value1";  
  2. string value2 = "Value2";  
  3.  
  4. MyClass mc = new MyClass();  
  5. mc.ChangeValue(value1, value2); 

效果:

效果  

另:

数组类型的参数:

数组类型是引用类型的数据,所以也应归类于引用类型.

  1. public class MyClass  
  2. {  
  3.     public MyClass()  
  4.     {  
  5.         //  
  6.         //TODO: 在此处添加构造函数逻辑  
  7.         //  
  8.     }  
  9.  
  10.     public void ChangeValue(string[] value)  
  11.     {  
  12.         value[0] = "This is Value0,Changed!";  
  13.     }  

----------------------------------------------

 

  1. string[] value = { "Value1""Value2" };  
  2.  Response.Write(value[0] + "
    "
    );  
  3.  
  4.  MyClass mc = new MyClass();  
  5.  mc.ChangeValue(value);  
  6.  
  7.  Response.Write(value[0] + "
    "
    );  

效果:

效果 

注意:

ref和out的区别:

传递到ref参数的参数必须***初始化,而out的参数在传递之前不必初始化.

四种C#参数类型就总结到这里,希望对大家有用。

【编辑推荐】

  1. C#事件和委托的编译代码
  2. C#事件的由来
  3. 学习C#委托:将方法绑定到委托
  4. 学习C#委托:将方法作为方法的参数
  5. C# 插件构架实例详解
责任编辑:book05 来源: cnblogs
相关推荐

2009-08-26 15:04:35

C#转换

2009-09-08 17:20:01

C#排序算法

2009-08-05 14:09:04

C#日期转换

2021-10-24 08:37:18

网络监控网络架构网络

2009-09-22 14:20:39

C#播放声音

2013-05-30 10:06:05

光纤光纤跳线

2009-09-17 16:55:58

C#组件设计

2024-05-21 14:04:16

2021-12-01 23:05:27

物联网计算数据

2020-05-19 20:13:04

物联网计算类型IOT

2022-03-25 14:47:24

Javascript数据类型开发

2009-08-25 17:52:01

C#可空值类型

2009-07-08 18:20:21

JDBC驱动

2018-09-13 14:51:43

NoSQL数据库大数据

2013-06-28 10:17:04

2022-06-27 11:09:06

边缘计算

2009-08-27 15:00:55

C#线程控制

2017-08-01 23:44:25

数据分析数据科学数据

2023-08-30 14:08:44

人工智能机器人

2009-08-19 15:59:24

C#参数类型
点赞
收藏

51CTO技术栈公众号