首页 > 编程语言 >C#-01 关于C#中传入参数的一些用法

C#-01 关于C#中传入参数的一些用法

时间:2022-09-21 23:48:40浏览次数:67  
标签:01 C# void dt 用法 int 参数 实参 public

实验环境

  实验所处环境位于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} ");
            }
        }
    }

关于四种参数的对比:

标签:01,C#,void,dt,用法,int,参数,实参,public
From: https://www.cnblogs.com/bzxf/p/16717617.html

相关文章

  • Oracle删除表空间和用户
    删除oracle用户和表空间的方法删除用户1dropuser用户名称cascade;删除表空间1DROPTABLESPACEtablespace_nameINCLUDINGCONTENTSANDDATA......
  • socket的阻塞与非阻塞
    socket的阻塞与非阻塞同步:主动请求并等待IO操作完成的方式异步:主动请求数据后,可以去处理其它任务,随后等待IO操作完毕的通知阻塞:线程持续等待资源中数据准备完成,直到返回......
  • cmd导入导出Oracle数据库命令
    导入与导出,如下:数据导出:exp用户名/密码@网络服务名file=xxx.dmptables=(表名);eg:expuser/[email protected]=d:\dbbackup\file1221_zwy.dmplog=d:\dbbac......
  • Docker常用命令总结
    Docker常用命令重启docker命令systemctlrestartdocker进入镜像dockerexec-itmysql/bin/bash移除指定容器dockerrm-f<containerid>删除未启动成......
  • Asp.Net Core鉴权授权:JWT基本使用
    实现用户登录功能的经典做法是用Session,但是在前后端分离、分布式环境下已经不适应了,而现在我们倾向于采用JWT代替Session实现登录。JWT全称是JSONwebtoken,它是使用JSON......
  • Oracle 23c? What happened 20c&22c
    AsyouknowOraclehasbeenchanedreleasename.InthispostwetalkaboutOracleRealeases.BeforewestartletuseseecurrentOracleDatabaseRealeasesand......
  • Python commandline-config简洁命令行配置工具: 一个供用户以Python Dict或JSON格式编
    本文介绍了一个可以直接用pip安装的python工具包commandline-config,适合经常写python代码跑实验的研究生们,工具可以通过Python原生字典dict(支持嵌套)的形式来写实验的参数配......
  • centos修改root密码
    1.开机时,在选择内核时按e  2.在linux16这行最后输入rd.breakconsole=tty0,进入系统   此时进入紧急模式 3.依次输入mount-oremount,rw/sysrootchroot......
  • secure boot (一)fit image
    前言secureboot和FITImage是前段时间接触到的,其实早就该总结下了,奈何懒癌犯了,拖了好久才写出来。之前也有人问我,工作后最大的感受是什么?我的回答是:“快速学习”。就......
  • secure boot (二)基本概念和框架
    什么是securebootsecureboot是指确保在一个平台上运行的程序的完整性的过程或机制。secureboot会在固件和应用程序之间建立一种信任关系。在启用secureboot功能后,未经......