在C#中,方法的参数类型有四种:

  • 值类型
  • 引用类型
  • 输出类型
  • 数组型参数

值参数:

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

例子:

public class MyClass
{
public MyClass()
{
//
//TODO: 在此处添加构造函数逻辑
//
} public void ChangeValue(string value)
{
value = "Value is Changed!";
}
} ------------------------------------- string value = "Value";
Response.Write(value+"<br/>"); MyClass mc = new MyClass();
mc.ChangeValue(value); Response.Write(value);

效果:

引用参数:

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

注意ref的使用!

例子:

public class MyClass
{
public MyClass()
{
//
//TODO: 在此处添加构造函数逻辑
//
} public void ChangeValue(ref string value)
{
value = "Value is Changed!";
}
} ----------------------------- string value = "Value";
Response.Write(value+"<br/>"); MyClass mc = new MyClass();
mc.ChangeValue(ref value); Response.Write(value);

效果:

输出参数:

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

例子:

public class MyClass
{
public MyClass()
{
//
//TODO: 在此处添加构造函数逻辑
//
} public void ChangeValue(out string value)
{
value = "Value is Changed!";
}
} --------------------------------- string value ; MyClass mc = new MyClass();
mc.ChangeValue(out value); Response.Write(value);

效果:

数组型参数:

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

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

例子:

public class MyClass
{
public MyClass()
{
//
//TODO: 在此处添加构造函数逻辑
//
} public void ChangeValue(params string[] value)
{
foreach (string s in value)
{
HttpContext.Current.Response.Write(s + "<br/>");
}
}
} ------------------------------------------ string value1 = "Value1";
string value2 = "Value2"; MyClass mc = new MyClass();
mc.ChangeValue(value1, value2);

效果:

另:

数组类型的参数:

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

public class MyClass
{
public MyClass()
{
//
//TODO: 在此处添加构造函数逻辑
//
} public void ChangeValue(string[] value)
{
value[0] = "This is Value0,Changed!";
}
} ---------------------------------------------- string[] value = { "Value1", "Value2" };
Response.Write(value[0] + "<br/>"); MyClass mc = new MyClass();
mc.ChangeValue(value); Response.Write(value[0] + "<br/>");

效果:

注意:

ref和out的区别:

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

C#--方法的参数类型的更多相关文章

  1. WebApi 方法的参数类型总结。

    1:[HttpGet]  ①:get方法之无参数. [HttpGet] public IHttpActionResult GetStudentInfor() { List<StudentMode ...

  2. 为什么 Java ArrayList.toArray(T[]) 方法的参数类型是 T 而不是 E ?

    前两天给同事做 code review,感觉自己对 Java 的 Generics 掌握得不够好,便拿出 <Effective Java>1 这本书再看看相关的章节.在 Item 24:E ...

  3. Java程序设计基础笔记 • 【第9章 方法与参数类型】

    全部章节   >>>> 本章目录 9.1 有参数有返回值的方法 9.1.1 有参数有返回值的方法的定义和调用 9.1.2 返回值的传递过程 9.1.3 方法返回值的注意事项 9 ...

  4. 关于PHP的方法参数类型约束

    在之前的文章PHP方法参数的那点事儿中,我们讲过关于PHP方法参数的一些小技巧.今天,我们带来的是更加深入的研究一下PHP中方法的参数类型. 在PHP5之后,PHP正式引入了方法参数类型约束.也就是如 ...

  5. Java在方法中定义可变参数类型

    学习目标: 掌握可变参数的应用 学习内容: 1.定义 在方法中传递数组有一种更简单的方式--方法的可变参数,其本质是一个语法糖,目的是让开发者写代码更简单. 2.语法 [修饰符] 返回值类型 方法名称 ...

  6. CLR via C# 读书笔记---常量、字段、方法和参数

    常量 常量是值从不变化的符号.定义常量符号时,它的值必须能在编译时确定.确定后,编译器将唱两只保存在程序集元数据中.使用const关键字声明常量.由于常量值从不变化,所以常量总是被视为类型定义的一部分 ...

  7. CLR via C#深解笔记四 - 方法、参数、属性

    实例构造器和类(引用类型) 构造器(constructor)是允许将类型的实例初始化为良好状态的一种特殊方法.构造器方法在“方法定义元数据表”中始终叫.ctor. 创建一个引用类型的实例时: #1, ...

  8. C#方法中参数ref和out的解析

    一.C#方法中参数类型 有4种参数类型,有时候很难记住它们的不同特征,下图对它们做一个总结,使之更容易比较和对照. 二.C#方法中的参数 1.值参数 使用值参数,通过复制实参的值到形参的方式把数据传递 ...

  9. c# 方法传递参数

    一.参数的使用方法: 1.值参数(Value Parameter ) 格式:方法名称(参数类型 参数名称[,参数类型 参数名称]) 2.引用参数(Reference Parameter ) 格式:方法 ...

随机推荐

  1. Html jquery实现根据 IOS和Android访问跳转

    <script src="js/jquery-1.7.1.min.js" type="text/javascript"></script> ...

  2. PHP防止SQL注入的方法

    [一.在服务器端配置] 安全,PHP代码编写是一方面,PHP的配置更是非常关键. 我们php手手工安装的,php的默认配置文件在 /usr/local/apache2/conf/php.ini,我们最 ...

  3. php与http协议

    1.预定义变量$_SERVER     $_SERVER 是一个包含了诸如头信息(header).路径(path).以及脚本位置(script locations)等等信息的数组. 可以再后台输出 f ...

  4. == 与 is

    Python中的对象包含三要素:id.type.valueid:用来唯一标识一个对象: type:标识对象的类型: value是对象的值. ==是判断对象的值是否相等,也就是value,is是判断对象 ...

  5. oldboy第三天学习

    一.上课体验及感受 额第三天了.身心疲惫.上课一脸懵逼,是最标准的诠释.三个星期的疲惫感,更深了.很难,但是还要继续 写好作业.吸收知识. 二.三级列表 menu = { '北京':{ '海淀':{ ...

  6. java注解实例-反射生成sql

    定义描述用户表的注解: package dao; import java.lang.annotation.ElementType; import java.lang.annotation.Retent ...

  7. 使用minidwep-gtk-PJ-wifi教程中文版

  8. LINUX下为LVM磁盘增加硬盘空间

    总结: ~~~~~~~~~~~~~~~~~~~~ fdisk -lpvcreate /dev/sdbvgextend VolGroup /dev/sdblvextend -L +180G /dev/m ...

  9. rsyslog 直接kill进程,在重新启动会全部发送日志

    <pre name="code" class="html">jrhapt11:/root# ps -ef | grep rsyslog root 8 ...

  10. 【转】JAVA 读写二进制文件

    原文网址:http://shiminghua234.blog.163.com/blog/static/263912422011619102350866 import java.io.*; /** * ...