首页 > 其他分享 >params, ref ,out, in关键字以及构造函数

params, ref ,out, in关键字以及构造函数

时间:2024-08-05 16:24:52浏览次数:13  
标签:string int 参数 params 构造函数 ref out

1.params(paramerters )是可变参数,参数个数不固定 

2.可变参数不能在必填写参数前边,且可变参数只能有一个(把参数传递给一

个数组,参数个数也可以不固定,但不包含0)

 public static int Sum(params int[] nums)
 {
     int sum1 = 0;
     //for循环在循环中可以更改目标,而forreach不能
    //for的应用范围比foreach广
     for (int i = 0; i < nums.Length; i++)
     {
         sum1 += nums[i];
     }
    //
     foreach (int i in nums)
     {
         sum1 += nums[i];
     }
     return sum1;
 }
  //将参数传递给一个数组,参数的个数也可以不固定,但不包括0
  
public static float Sum1(float[] nums)
{
 float sum =0;
   for(int i = 0; i<nums.Length;i++)
   {
     sum +=num[i];
   }
    return sum;
}
//除非带有默认值,就包括0了
 public static float Sum2(float[] nums =null)
{
 float sum =0;
   for(int i = 0; i<nums ?.Length;i++)
   {
     sum +=num[i];
   }
    return sum;
}

2.ref(reference)          引用 ,指针,地址  ref是输入参数

形参的数据类型虽然是值类型,但添加ref关键字,实参向形参传递的不再是变量值,而是变量地址

向ref形参传递参数时,实参必须初始化

ref传入的变量必须初始化,但是在内部可改可不改

例:

方法声明:在方法签名中,需要在参数类型前加上ref关键字。

void ModifyValue(ref int number) 
{
    number = 20;
}

方法调用:调用时,也需要在参数前加上ref关键字,并且传递的实参必须先被初始化。

int num = 10;
ModifyValue(ref num);
Console.WriteLine(num); // 输出20,因为num的值在方法内被改变了

3.out(输出参数)

通常方法的返回值只能有一个,通过return返回,方法输出的结果可以有多个,return只是返回结果的一种方式,而输出参数是另外一种方式。

out 关键字适用于需要返回多个值的情况,方法可以通过 out 参数将多个值传递给调用方。

输出参数在方法内部必须赋初始值。即:out传入的变量不用初始化,但是在内部必须修改该值

向out形参传递参数时,实参不必初始化。

out 关键字在方法调用时,必须传递变量,而不能传递常量或表达式。

out 关键字用于将方法的输出参数传递给调用方。被声明为 out 的参数在方法内部必须被赋值,且在方法返回前必须赋值。

 public int Method3(int a, out string x, out long y, int z)
 {
     x = "hello world";
     y = 200;
     return 100;
 }




 //向out形参传递参数时,实参不必初始化。
 string xx = "abc";
 long yy = 100;
 int result = cls.Method3(0, out xx, out yy, 0);

 Console.WriteLine($"xx={xx},yy={yy}");
 Console.WriteLine($"返回值={result}");


//输出结果
//xx=hello world,yy=200
//返回值=100

4.in

in关键字用于将参数按只读的方式传递给方法。被声明为in的参数在方法内部不能修改,只能去读取

in关键字在方法调用时,可以传递变量,常量或表达式

public class Class1
{
 public string Method4(int a, in string x, in long y, int z)
 {
     //x = "hello world";  // 报错
     //y = 200;
     return x + 100 + y;
 }

}


       Class1 cls = new Class1();
     // 向in形参传递参数时,必须初始化。由于方法不让修改in形参,所以实参不受影响
        string xxx = "abc";
        long yyy = 100;
        string result1 = cls.Method4(0, in xxx, in yyy, 0);
        Console.WriteLine($"xxx={xxx},yyy={yyy}");
        Console.WriteLine($"返回值={result1}");
//输出结果
//xxx=abc,yyy=100
//返回值=abc100100

in,ref与out关键字的区别
ref传递的参数在调用方法前必须已经被初始化;而out参数则不需要初始化,方法内部会负责初始化。
ref既可用于输入也可用于输出,意味着方法内可以读取和修改参数的值;而out主要作为输出参数,表明方法将会为这些参数赋新值。

in和out最大不同,in传递过来的参数不能修改。而out必须修改,ref可改可不改
 构造函数

1.构造函数在实例化时执行

2.构造函数在执行时,先进入子类,再进入父类,依次向上,直到object对象,

       出来时,先把object对象的构造函数执行完,再回到父类执行,再到子类向下。

3.base()默认调用父类无参构造函数。它充当了父类的实例

第一种:实例构造函数

public class Man
{
  private int Id;
private string Name;
private string Description;
 public Parent(int id, string name, string description)
 {
     this.Id = id;
     this.Name = name;
     this.Description = description;
    
 }
}

只要创建Man的对象,它就会调用类中的实例构造函数,在实例化时传参值

Man man = new Man(1,"张三“,"个人简介");

第二种:静态构造函数

静态构造函数的特点:

 静态构造函数不能使用访问修饰符,只能有静态成员

静态构造函数只执行一次不再执行

类或结构体中只能具有一个静态构造函数

静态构造函数不能继承或重载

静态构造函数会在实例构造函数之前运行

public class Class1
{ 
  public static int count =0;
  public Class1()
  {
   count =1;
  }
static Class1()
{
  count =2;
}
static void Main(string[] args)
 {
  Console.WriteLine("count ={0}",count);
  Class1 class1 = new Class1();
  Console.WhriteLine("count = {0}",count);
  Console.ReaKey();
 }
}
//它会先执行count =0,再执行count =2,最后执行count =1

标签:string,int,参数,params,构造函数,ref,out
From: https://blog.csdn.net/2302_82303876/article/details/140669583

相关文章

  • 懂个锤子Vue VueRouter路由深入浅出
    VueRouter路由深入浅出VueRouter介绍:VueRouter是Vue.js官方的路由管理器:极大地简化了在单页面应用程序SPA-SinglePageApplication:中构建导航和页面切换的复杂性;单页面应用程序SPA单页面应用程序SPA,SinglePageApplication:在用户首次访问时加载整个应用程序......
  • STM32之GPIO(General Purpose Input/Output,通用型输入输出)
    文章目录前言一、GPIO简介二、GPIO结构2.1GPIO基本结构2.2GPIO位结构2.2.1输入部分2.2.1输出部分四、GPIO模式4.1浮空/上拉/下拉输入4.2模拟输入4.3开漏/推挽输出4.4复用开漏/推挽输出前言提示:本文主要用作在学习江协科大STM32入门教程后做的归纳总结笔......
  • JavaScript Proxy() 构造函数、Proxy对象
    Proxy()构造函数Proxy()构造函数用于创建Proxy对象。语法newProxy(target,handler)可以使用Proxy()构造函数来创建一个新的Proxy对象。构造函数接收两个必须的参数:target是要创建的对象,即要使用Proxy包装的目标对象(可以是任何类型的对象,包括原生数组,函数......
  • 使用 addRouteMiddleware 动态添加中间
    title:使用addRouteMiddleware动态添加中间date:2024/8/4updated:2024/8/4author:cmdragonexcerpt:摘要:文章介绍了Nuxt3中addRouteMiddleware的使用方法,该功能允许开发者动态添加路由中间件,以实现诸如权限检查、动态重定向及路由变化时的特定操作。内容涵盖路由中间......
  • 在Windows 11上导入shout模块时缺少dll错误
    经过大量研究,我终于在Windows11上安装了python-shout没有使用msys2/mingw。安装模块的setup.py文件是:#distutilsbuildscript#Toinstallshout-python,run'pythonsetup.pyinstall'fromsetuptoolsimportsetup,Extensionimportosimportsysimpo......
  • C++ 面向对象基础-构造函数
    目录1.构造函数1.1基本使用1.2函数参数默认值1.3构造初始化列表 1.4隐式调用构造函数2.拷贝构造函数2.1概念2.2浅拷贝2.3深拷贝3.析构函数1.构造函数1.1基本使用构造函数是一种特殊的成员函数,用于创建对象时初始化,写法上有以下要求:●函数名称必......
  • 【C#】params参数
    1.概述将实参列表中跟可变参数数组类型一致的元素都当做数组的元素去处理。params可变参数必须是形参列表中的最后一个元素。2.示例usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceC......
  • 题解:CF507C Guess Your Way Out!
    CF507CGuessYourWayOut!题解算法模拟思路按照左右左右的方式先往下找,每次找到一个子节点时就看此节点为根的子树是否包含目标节点,如果包含就继续往下走,不包含说明目标叶子节点在另一边的子树上,那么肯定是先需要把这边的子树遍历完才能换到另一边,所以答案直接加上这个子树......
  • IT66353: 3 IN to 1 OUT HDMI 2.0 18 Gb/s Re Timer Switch
    TheIT66353isanHDMI2.0,3INto1OUTre-timerswitchwhichsupportsmaximumsignalingrateofupto6Gbps/channel. IT66353是一个HDMI2.0,3进1出重定时器开关,支持高达6Gbps/通道的最大信号速率。ItiscompliantwiththelatestHDMI2.0bspecification......
  • Next.js 中为什么 App Router 可能是未来,但 Pages Router 仍然重要?
    Next.js作为一个强大的React框架,为开发者提供了两种路由系统:AppRouter和PagesRouter。这两种路由系统各有特色,适用于不同的场景。本文将深入探讨这两种路由系统的区别、优缺点和使用场景,帮助你做出最佳选择。AppRouter:新一代的路由革命AppRouter是Next.js13引入的......