参数和扩展方法

    技术2025-01-21  14

    本章概要:    1:实参和形参;    2:命名实参和可选实参;

        3:扩展方法;

        4:C#参数的四个类型

        4.1:值类型

        4.2:引用类型

        4.3:输出类型

        4.4:数组型参数

     

    1:实参和形参    形参:全称为"形式参数"是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传如的参数.     实参:全称为"实际参数"是在调用时传递个该函数的参数。    查看代码:

     

    int f(int b) /*b为a形?参?*/ { return b; } main() { int a=1; printf("%d",f(a));/*a为a实º¦Ì参?*/ }

     

    2:命名实参和可选实参    有了命名实参,您将不再需要记住或查找形参在所调用方法的形参列表中的顺序。可以按形参名称指定每个实参的形参。例如,可以采用标准方式调用计算身体质量指数 (BMI) 的函数,方法是依照该函数定义的顺序按位置发送体重和身高的实参。    CalculateBMI(123, 64);     如果不记得形参的顺序,但却知道其名称,您可以按任意顺序(先发送体重或先发送身高)发送实参。    CalculateBMI(weight: 123, height: 64);    CalculateBMI(height: 64, weight: 123);    方法、构造函数、索引器或委托的定义可以指定其形参为必需还是可选。任何调用都必须为所有必需的形参提供实参,但可以为可选的形参省略实参。    每个可选形参都具有默认值作为其定义的一部分。如果没有为该形参发送实参,则使用默认值。默认值必须为常量。    public void ExampleMethod(int required, string optionalstr = "default string", int optionalint = 10)

        下面对 ExampleMethod 的调用导致编译器错误,原因是为第三个形参而不是为第二个形参提供了实参。    //anExample.ExampleMethod(3, ,4);    但是,如果您知道第三个形参的名称,则可以使用命名实参来完成任务。    anExample.ExampleMethod(3, optionalint: 4);

     

     

    3:扩展方法

        扩展方法是给现有类型添加一个方法。现在类型既可是基本数据类型(如int,String等),也可以是自己定义的类。这是从3.0后的一个新特性。

         1、扩展方法是给现有类型添加一个方法;

      2、扩展方法是通过 指定关键字this修饰方法的第一个参数;

      3、扩展方法必须声明在静态类中;

      4、扩展方法要通用对象实例来调用;

      5、扩展方法可以带参数。

     

    代码 // 必须建一个静态类,用来包含要添加的扩展方法 public static class Extensions { // 要添加的扩展方法必须为一个静态方法 // 此方法参数列表必须以this开始 第二个即为要扩展的数据类型,在这里就是要扩展string类型 // 第三个就无所谓了,就是一对象名,名字随便,符合命名规则即可 // 综合来讲,此方法就是要给string类型添加一个叫TestMethod的方法,此方法返回一个int型的值,即返回调用此方法对象的长度。 public static int TestMethod( this string s) { return s.Length; } } // 测试扩展方法类 class Program { static void Main( string [] args) { string str = " Hello Extension Methods " ; // 调用扩展方法,必须用对象来调用 int len = str.TestMethod(); Console.WriteLine(len); } } public class Student { public string Description() { return " Student............. " ; } public string Description( string name) { return " the student’s name is " + name; } } // 必须建一个静态类,用来包含要添加的扩展方法 public static class Extensions { // 要添加的扩展方法必须为一个静态方法 // 此方法参数列表必须以this开始 第二个即为要扩展的数据类型,在这里就是要扩展Student类型 // 第三个就无所谓了,就是一对象名,名字随便,符合命名规则即可 // 综合来讲,此方法就是要给Student类型添加一个叫TestMethod的方法,此方法返回一个string型的值 public static string TestMethod( this Student s) { return s.Description(); } // 要添加的扩展方法必须为一个静态方法 // 此方法参数列表第一个参数表示要扩展哪一个类,第二个参数才表示此扩展方法的真正参数 // 综合来讲,此方法就是要给Student类型添加一个叫TestMethod的方法,此方法带有一个string类型的参数,并返回一个string型的值 public static string TestMethod( this Student s, string name) { return s.Description(name); } } // 测试扩展方法类 class Program { static void Main( string [] args) { Student stu = new Student(); // 调用扩展方法,必须用对象来调用 string mes = stu.TestMethod(); Console.WriteLine(mes); // 调用带参数的扩展方法,只要传第二个参数就可以了 // 因为他的第一个参数其实只是为了表明是扩展哪个数据类型 mes = stu.TestMethod( " name1 " ); Console.WriteLine(mes); } }

     

    4:C#参数的四个类型

    4.1:值类型

      所谓值参数,就是利用值向方法传递参数时,编译程序给实参的值做一份拷贝,并将此拷贝传递给该方法,这样做的结果就是被调用的方法不会修改实参的值,保证了实际值的安全,在调用方法时,如果形参的类型时值类型的话,必须保证实参的类型也是值类型的数据.

          需要强调的是,非基础型别参数非值引用。

    4.2:引用类型

          使用ref关键字可以使参数按照引用传递.在需要传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中,若使用ref关键字,则在方法定义和调用方法时都必须显式使用ref关键字.

    4.3:输出类型

          使用out关键字来进行引用传递,这和ref关键字很累世,不同之处在于ref要求变量必须在传递之前就进行初始化,若使用out关键字,则方法定义和调用时都必须显式的使用out关键字.

    4.4:数组型参数

          数组型参数就是声明params关键字,用于指定在参数数目可变处采用参数的方法参数。在方法声明中的params关键字之后不允许任何其他参数,并且在方法声明中只允许一个params关键字.

     

     

    转自:http://www.cnblogs.com/luminji/archive/2010/09/06/1819327.html

    最新回复(0)