📜  C#|方法参数

📅  最后修改于: 2021-05-29 21:27:07             🧑  作者: Mango

C#中的方法通常是程序中的代码块或语句块,它使用户能够重用相同的代码,从而最终节省了过多的内存使用,节省了时间,更重要的是,它提供了更好的代码可读性。因此,可以说方法是执行某些特定任务的语句的集合,并且可能(也可能不)将结果返回给调用方。
在某些情况下,用户希望执行一种方法,但有时该方法需要一些有价值的输入才能执行和完成其任务。这些输入值在计算机语言术语中称为“参数”

C#包含以下类型的方法参数:

  • 命名参数
  • 参考参数
  • 输出参数
  • 默认或可选参数
  • 动态参数
  • 值参数
  • 参量

命名参数

使用命名参数,可以根据参数名称而不是方法中的顺序指定参数的值。换句话说,它为我们提供了一种不记住参数顺序的便利。这个概念在C#4.0中引入。当您在方法中使用大量参数时,它使您的程序更易于理解。但是请记住,命名参数总是出现在固定参数之后,如果您尝试在命名参数之后提供固定参数,则编译器将抛出错误。

例子:

// C# program to illustrate the 
// concept of the named parameters
using System;
  
public class GFG {
  
    // addstr contain three parameters
    public static void addstr(string s1, string s2, string s3)
    {
        string result = s1 + s2 + s3;
        Console.WriteLine("Final string is: " + result);
    }
  
    // Main Method
    static public void Main()
    {
        // calling the static method with named 
        // parameters without any order
        addstr(s1: "Geeks", s2: "for", s3: "Geeks");
                     
    }
}

输出:

Final string is: GeeksforGeeks

参考参数

ref是C#中的关键字,用于通过引用传递值类型。或者我们可以说,当控件返回到调用方法时,如果对方法中的此参数进行的任何更改都将反映在该变量中。 ref参数不传递该属性。在ref参数中,有必要在传递给ref之前对参数进行初始化。当被调用的方法还需要更改所传递参数的值时,通过ref参数传递值很有用。

例子:

// C# program to illustrate the
// concept of ref parameter
using System;
  
class GFG {
  
    // Main Method
    public static void Main()
    {
  
        // Assigning value
        string val = "Dog";
  
        // Pass as a reference parameter
        CompareValue(ref val);
  
        // Display the given value
        Console.WriteLine(val);
    }
  
    static void CompareValue(ref string val1)
    {
        // Compare the value
        if (val1 == "Dog") 
        {
            Console.WriteLine("Matched!");
        }
  
        // Assigning new value
        val1 = "Cat";
    }
}

输出:

Matched!
Cat

输出参数

out是C#中的关键字,用于将参数作为引用类型传递给方法。通常在方法返回多个值时使用。 out参数不会传递该属性。传递给输出之前,无需初始化参数。当方法返回多个值时,对整个参数进行参数声明非常有用。

例子:

// C# program to illustrate the
// concept of out parameter
using System;
  
class GFG {
  
    // Main method
    static public void Main()
    {
  
        // Creating variable
        // without assigning value
        int num;
  
        // Pass variable num to the method
        // using out keyword
        AddNum(out num);
  
        // Display the value of num
        Console.WriteLine("The sum of"
          + " the value is: {0}",num);
                            
    }
  
    // Method in which out parameter is passed
    // and this method returns the value of
    // the passed parameter
    public static void AddNum(out int num)
    {
        num = 40;
        num += num;
    }
}

输出:

The sum of the value is: 80

默认或可选参数

顾名思义,可选参数不是强制性参数,它们是可选参数。它有助于排除某些参数的参数。或者我们可以说在可选参数中,没有必要在方法中传递所有参数。此概念在C#4.0中引入。在这里,每个可选参数都包含一个默认值,这是其定义的一部分。如果我们没有将任何参数传递给可选参数,则它将采用其默认值。可选参数始终在参数列表的末尾定义。换句话说,方法,构造函数等的最后一个参数是可选参数。

例子:

// C# program to illustrate the 
// concept of optional parameters 
using System; 
    
class GFG { 
    
    // This method contains two regular 
    // parameters, i.e. ename and eid
    // And two optional parameters, i.e. 
    // bgrp and dept 
    static public void detail(string ename,  
                               int eid, 
                               string bgrp = "A+", 
                    string dept = "Review-Team") 
    
    { 
        Console.WriteLine("Employee name: {0}", ename); 
        Console.WriteLine("Employee ID: {0}", eid); 
        Console.WriteLine("Blood Group: {0}", bgrp); 
        Console.WriteLine("Department: {0}", dept); 
    } 
    
    // Main Method 
    static public void Main() 
    { 
    
        // Calling the detail method 
        detail("XYZ", 123); 
        detail("ABC", 456, "B-"); 
        detail("DEF", 789, "B+", 
           "Software Developer"); 
    } 
} 

输出:

Employee name: XYZ
Employee ID: 123
Blood Group: A+
Department: Review-Team
Employee name: ABC
Employee ID: 456
Blood Group: B-
Department: Review-Team
Employee name: DEF
Employee ID: 789
Blood Group: B+
Department: Software Developer

动态参数

C#4.0中,引入了一种称为动态参数的新型参数。这里的参数是动态传递的,这意味着编译器不会在编译时检查动态类型变量的类型,而是由编译器在运行时获取类型。动态类型变量是使用dynamic关键字创建的。

例子:

// C# program to illustrate the concept 
// of the dynamic parameters
using System;
  
class GFG {
  
    // Method which contains dynamic parameter
    public static void mulval(dynamic val)
    {
        val *= val;
        Console.WriteLine(val);
    }
  
    // Main method
    static public void Main()
    {
  
        // Calling mulval method
        mulval(30);
    }
}

输出:

900

值参数

它是方法中的常规值参数,或者您可以说按值传递值类型。因此,当变量作为值类型传递时,它们包含数据或值,而不包含任何引用。如果要对值类型参数进行任何更改,则它不会反映作为参数存储的原始值。

例子:

// C# program to illustrate value parameters
using System;
  
public class GFG {
  
    // Main Method
    static public void Main()
    {
  
        // The value of the parameter
        // is already assigned
        string str1 = "Geeks";
        string str2 = "geeks";
        string res = addstr(str1, str2);
        Console.WriteLine(res);
    }
  
    public static string addstr(string s1, string s2)
    {
        return s1 + s2;
    }
}

输出:

Geeksgeeks

参量

当程序员对要使用的参数数量没有任何先验知识时,这很有用。通过使用参数,您可以传递任意数量的参数。仅允许使用一个params关键字,并且在params关键字之后的函数声明中将不允许其他Params。如果不传递任何参数,则参数的长度将为零。

例子:

// C# program to illustrate params
using System;
namespace Examples {
  
class Geeks {
  
    // function containing params parameters
    public static int mulval(params int[] num)
    {
        int res = 1;
  
        // foreach loop
        foreach(int j in num)
        {
            res *= j;
        }
        return res;
    }
  
    static void Main(string[] args)
    {
  
        // Calling mulval method
        int x = mulval(20, 49, 56, 69, 78);
  
        // show result
        Console.WriteLine(x);
    }
}
}

输出:

295364160