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

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

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值