实验环境

实验所处环境位于vs2019环境中

学习内容

一、最基础的参数传入:值参数

  • 对于这种传入,和其他的c,c++编程语言参数传入一样,没有太大差别,在这里给如下例子:
  • 虽然这里并没有进行传参但是还是可以理解值传入的意思,即最简单(基础)的传入。
    namespace date
{
class DateClass //值传入
{ public int GetdateHour()
{
DateTime dt = DateTime.Now;
return dt.Hour;
}
public int GetdateMinute()
{ DateTime dt = DateTime.Now;
return dt.Minute;
}
}
class Program
{
static void Main(string[] args)
{
DateClass DC = new DateClass();
Console.WriteLine("time0 :{0} : {1} ",DC.GetdateHour(),DC.GetdateMinute());
}
}
}

二、引用参数

  • 在使用引用参数时:1、必须在声明和调用中都是使用 ref 这一关键词;2、在使用时传入的实参必须为变量或者对象(具体原因后面会说)。

    具体实例如下:
    namespace date
{
class AddClass
{
public int x = 100;
public int y = 50; public int GetX()
{
return x;
}
public int GetY()
{
return y;
}
}
class Program
{
static void Doadd(ref AddClass f1,ref int f2,int f3)
//在使用引用参数的一定要使用static ,不然就会报错为对象引用对于非静态的字段、方法或属性“Program.Doadd(ref AddClass, ref int, int)”是必需的
{
f1.x += 10;
f2 += 10;
f3 += 10;
Console.WriteLine($"f1.x = {f1.x} f2 = {f2} f3 = {f3} ");
}
static void Main(string[] args)
{
AddClass a1=new AddClass();
int a2=99, a3=15;
Doadd(ref a1, ref a2, a3);
Console.WriteLine($"f1.x = {a1.x} f2 = {a2} f3 = {a3} ");
//运行结果为 110 109 25
// 110 109 15 由此可以看出引用参数是直接使用了实参的存储位置,所以会修改实参的值
}
}
}
  • 现在返回头来看为什么实参必须为变量或对象,在上面代码段的运行结果中我们可以看到修改了数据,其实引用参数是实参的 “别名” ,它所指向的位置和实参的位置相同,所以实参必须为变量或对象是为了提供地址空间,如果传一个数字,那么便无法让“别名”指向实参。
  • 当实参是对象的话,如果在函数中别名申请了一个新的对象,那么会导致在主函数中的实参和引用参数一同发生修改。我们称这种用法叫引用类型做为引用参数

图像解释引用类型做为引用参数:

三、输出参数

  • 输出参数是C#7的一个新的特性,他的主要目的是为了解决一个函数不能有多个返回值而出现的
  • 使用输出函数有两个要求:1、使用out作为修饰符;2、实参必须为变量,不能是其他类型的表达式(原因与之前的相同:需要内存位置) 。具体实例如下:
    namespace date
{
class DateClass
{
//输出参数
public void GetdataHM(out int x, out int y)
{
DateTime dt = DateTime.Now;
x = dt.Hour;
y = dt.Minute;
}
}
class Program
{
static void Main(string[] args)
{
int x, y; //输出参数,可以利用传入“out”类型参数来实现多个数据的传出
DC.GetdataHM(out x, out y);
Console.WriteLine($"time2 : {x} : {y}");
}
}
}

参数数组

  • 在前面讲的参数类型中,一个形参必须严格对应一个实参,但是在参数数组中,它允许一个或多个实参对应一个特定的形参
  • 参数的特点如下:
    1. 一个参数列表中只能有一个参数数组
    2. 如果有,他必须是参数列表中的最后一个
    3. 声名一个参数列表必须有如下规则:
      • 在数据类型前使用params修饰符
      • 在数类型后放置一组空的方括号
    4. 下面展示语法:
    void ListInts(params int [] invals)
//params 是修饰符
//int[] 是int 类型参数数组
//invals 是参数名称
ListInts(10,20,30); //3个int
ListInts(10,20,30,20);
ListInts(10,20,30,4,50,46);
int[] inArray = {1,2,3};
ListInts(inArray); //数组类型
  • 声明中有params,而调用时没有

  • 例子如下:

    namespace date
{
class Program
{
public void ListInts(params int[] x)
{
if(x!=NULL&&x.length()>0)
{
for(int i=0;i<x.length();i++)
{
x[i]*=10;
Console.WriteLine($" {x[i]} ");
}
}
}
static void Main(string[] args)
{
int x1=10, x1=20, x3=30, x4=40;
ListInts(x1,x2,x3,x4);
Console.WriteLine($" {x1} {x2} {x3} {x4} ");
}
}
}

关于四种参数的对比:

C#-01 关于C#中传入参数的一些用法的更多相关文章

  1. (转载)mybatis中传入参数是list或map

    原文地址:http://blog.csdn.net/aya19880214/article/details/41961235 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集 ...

  2. mysql存储过程或函数中传入参数与表字段名相同引发的悲剧

    真实案例.如下的一个存储过程: create procedure Apple(in user_id int) begin delete from users where user_id = user_ ...

  3. MyBatis中传入参数parameterType类型详解

    前言 Mybatis的Mapper文件中的select.insert.update.delete元素中有一个parameterType属性,用于对应的mapper接口方法接受的参数类型.本文主要给大家 ...

  4. C#-02 传入参数的一些用法2

    C#_02 参数应用2 一.关于 "ref" 局部变量和 "ref" 返回 在前面已经明白了 ref 关键词传递一个对象引用给方法调用,这样在方法中对对象修改过 ...

  5. 向shell脚本中传入参数

    写一个 程序名为    test.sh    可带参数为 start 和 stop 执行  test.sh start执行  start 内容的代码 执行 test.sh stop 执行 stop 内 ...

  6. mybatis :xml文件中传入参数和if标签结合使用时要点

    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.Reflecti ...

  7. Main方法中传入参数

    ↓ 这个时候会报错: Instantiate the class:DonutShop java.lang.ClassNotFoundException: DonutShop    at java.ne ...

  8. Oracle存储过程中传入参数,传出字符串

    create or replace procedure getStr(usercode in varchar2,str out varchar2) is v_sql ); isEdit ); isAd ...

  9. 两种方式— 在hive SQL中传入参数

    第一种: sql = sql.format(dt=dt) 第二种: item_third_cate_cd_list = " 发发发 " ...... ""&qu ...

随机推荐

  1. Hbuilderx Eslint配置

    [参照链接]https://blog.csdn.net/m0_67394002/article/details/123346267 安装插件 eslint-js eslint-plugin-vue 复 ...

  2. MyBatis-Plus联表查询的短板,终于有一款工具补齐了

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是Hydra. mybatis-plus作为mybatis的增强工具,它的出现极大的简化了开发中的数据库操作,但是长久以来,它的 ...

  3. Odoo14 一些好用的开源的模块

    # odoo14中一些好用的开源的模块 1.intero_reload_form 刷新按钮(页面数据刷新,而不是按F5刷新整个页面) 2.ms_magic_button 弹框下拉选项 3.sessio ...

  4. s905l3a系列刷armbian 教你从0搭建自己的博客

    最近服务器又更换了,原来的有一点点小意外(一个电阻给我焊接时搞掉了). 哎~~今天,我淘到了一个好东西----CM311-3a,配置很诱人,价格也不贵,60绰绰有余 比较 CM311-3a N1(炒到 ...

  5. 重构、插件化、性能提升 20 倍,Apache DolphinScheduler 2.0 alpha 发布亮点太多!

    点击上方 蓝字关注我们 社区的小伙伴们,好消息!经过 100 多位社区贡献者近 10 个月的共同努力,我们很高兴地宣布 Apache DolphinScheduler 2.0 alpha 发布.这是 ...

  6. Selenium 4 有哪些不一样?

    转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/d59b986c.html 你好,我是测试蔡坨坨. 众所周知,Selenium在2021年10月13号发布了Selenium4 ...

  7. dpdk读字节,却触发了两次tlp

    在通过vfio框架透传设备到vm中,并且在vm中运行dpdk的驱动. 我们发现,dpdk偶尔的一次pread 2字节,却触发了两次tlp. 原因在于: do_io_rw { else if (fill ...

  8. Linux虚拟机报错grub rescue解决步骤

    /boot 分区内核文件丢失 实验准备 1) 准备:rm -rf /boot/* 2) 系统启动报错截图 修复步骤 重启显示logo时 按 Esc,选择从光驱启动 或者关机再选择打开电源时进入固件 移 ...

  9. KingbaseES触发器介绍

    触发器及其作用 触发器(trigger)是用户定义的由事件驱动的特殊过程.一旦定义,所有用户的对应操作均会由服务器自动激活相应的触发器,在DBMS核心层进行集中的完整性控制. 触发器类似于约束,但是比 ...

  10. docker_命令总结

    docker -v /hostDir:/containerDir /hostDir为宿主机的目录 /containerDir为容器内的目录 -v 实现两个目录的挂在,即容器内数据持久化到本机 dock ...