一天一小步_我学C#入门精典_第九天

第六章 函数

 1,定义和使用函数

class Program
{
    
static void Write()
    {
        Console.WriteLine(
"Text output from fumction");
    }
    
static void Main(string[] args)
    {
        Write();
        Console.ReadKey();
    }
}

 函数的定义由以下几部分组成:

  • 两个关键字:static 和 void
  • 函数名后跟圆括号, 如 Write();
  • 一个要执行的代码块,放在花括号中...

*函数名一般采用PascalCasing形式来编写.(简单的说,PascalCasing形式就是每个单词的首写字母大写)

 2,参数

 (1)参数匹配.在调用函数时,必须使参数与函数定义中指定的参数完全匹配,这意味着要匹配参数的类型,个数和顺序.

 (2) 参数数组.(参数的个数没有限制)

 C#允许为函数指定一个(只能指定一个)特定的参数,这个参数必须是函数定义中的最后一个参数,称为参数数组.参数数组可以使用个数不定的参数调用函数,它可以使用params关键字来定义.

params 关键字可以指定在参数数目可变处采用参数的方法参数。

在方法声明中的 params 关键字之后不允许任何其他参数(即此参数为最后一个参数),并且在方法声明中只允许一个 params 关键字。

参数数组可以简化代码,因为不必从调用代码中传递数组,而是传递可在函数中使用的一个数组中相同类型的几个参数.

示例:

class Program
{
    
static int SumVals(params int[] vals)
    {
        
int sum = 0;
        
foreach (int val in vals)
        {
            sum 
+= val;
        }
        
return sum;
    }

    
static void Main(string[] args)
    {
        
int sum = SumVals(15298);
       
//输出25
        Console.WriteLine(
"Summed Values = {0}", sum);
    }
}

 MSDN参考示例:

/*
    MSDN参考示例:
*/
public class MyClass 
{
    
public static void UseParams(params int[] list) 
    {
        
for (int i = 0 ; i < list.Length; i++)
        {
            Console.Write(list[i] 
+ " ");
        }
        Console.WriteLine();
    }

    
public static void UseParams2(params object[] list) 
    {
        
for (int i = 0 ; i < list.Length; i++)
        {
            Console.Write(list[i] 
+ " ");
        }
        Console.WriteLine();
    }

    
static void Main() 
    {
        UseParams(
123);
        UseParams2(
1'a'"test"); 

        
// An array of objects can also be passed, as long as
        
// the array type matches the method being called.
        int[] myarray = new int[3] {10,11,12};
        UseParams(myarray);
    }
}
/*
Output:
    1 2 3
    1 a test
    10 11 12
*/

 (3)引用参数和值参数

 值参数示例:

class program
{
    
static void Main(string[] args)
    {
        
int myNumber = 5;
        Console.WriteLine(
"myNumber = {0]", myNumber);
        shwoDouble(myNumber);
        Console.WriteLine(
"myNumber = {0}", myNumber);
    }
    
static void showDouble(int val)
    {
        val 
*= 2;
        Console.WriteLine(
"val doubled = {0}", val);
    }
}

 输出结果:

myNumber = 5
val doubled = 10
myNuber = 5

把myNumber作为一个参数,调用showDouble()并不影响myNumber的值.

使用引用参数ref示例:

class program
{
    
static void Main(string[] args)
    {
        
int myNumber = 5;
        Console.WriteLine(
"myNumber = {0}", myNumber);
        showDouble(
ref myNumber);
        Console.WriteLine(
"myNumber = {0}", myNumber);
    }
    
static void showDouble(ref int val)
    {
        val 
*= 2;
        Console.WriteLine(
"val doubled = {0}", val);
    }
}

 输出结果:

myNumber =5
val doubled =10
myNumber = 10

 *用ref参数的变量有两个限制:
首先,函数可能会改变引用参数的值,所以必须在函数调用中使用变量.(不能使用const关键).其次,必须使用初始化过的变量.

(4)输出参数out

该参数的值将返回给函数调用中使用的变量.与ref的区别:

  • 把未赋值的变量用作ref参数是非法的,但可以用作out参数
  • 在函数使用out参数时,该参数必须看作是还未赋值.

示例:

#region test15 输出参数out的使用
/// <summary>
/// test15
/// 输出参数out的使用
/// 在Main函数调用
/// </summary>
public void test15()
{
    
int[] myArray =1836259302 };
    
int maxIndex;
    Console.WriteLine(
"The maxnum value in myArray is {0}", MaxValue(myArray, out maxIndex));
    Console.WriteLine(
"最大值的下标是:========={0}=========", maxIndex + 1);
}
static int MaxValue(int[] intArray, out int maxIndex)
{
    
int maxVal = intArray[0];
    maxIndex 
= 0;
    
for (int i = 1; i < intArray.Length; i++)
    {
        
if (intArray[i] > maxVal)
        {
            maxVal 
= intArray[i];
            maxIndex 
= i;
        }
    }
    
return maxVal;
}
#endregion
.
原文地址:https://www.cnblogs.com/soso_ak/p/1443154.html