1.方法的声明

    [修饰符]  返回类型 方法名称(参数列表)

   {

    方法体

   }

   若方法没有返回值,则返回类型为void,此时return语句是可选的。

2.调用方法

   静态方法调用通过类名.方法名()的方式;实例方法调用时,需先使用new关键字实例化一个对象,再通过对象名.方法名()来调用。

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Pi is " + MathTest.GetPi());
            int x = MathTest.GetSquareOf(5);
            Console.WriteLine("Square of 5 is " + x);

            MathTest math = new MathTest();
            math.value = 10;
            Console.WriteLine("Value field of math variable contains " + math.value);
            Console.WriteLine("Square of 10 is " + math.GetSquare());
        }
    }

    class MathTest
    {
        public int value;

        public int GetSquare()
        {
            return value * value;
        }

        public static int GetSquareOf(int x)
        {
            return x * x;
        }

        public static double GetPi()
        {
            return 3.14159;
        }
    }

   输出内容:

                   

3.传参

   方法参数可以通过引用或值传递给方法。在传递给方法之前,无论是引用传递还是值传递,变量都必须初始化。

   变量通过引用传递给方法时,在方法内部所作的改变在方法退出之后仍然有效;若通过值传送给方法,方法调用后,变量仍然为原始值。

   C#中,除非特别指定,所有的引用类型都通过引用传递,所有的值类型都通过值来传递。

   特殊情况:字符串是不可变的,改变字符串的值,会创建一个全新的字符串,所以字符串无法采用一般引用类型的行为方式。方法调用时,对字符串做任何改变都不会影响原始字符串。

        static void SomeFunction(int[] ints,int i)
        {
            ints[0] = 100;
            i = 100;
        }

        static void Main(string[] args)
        {
            int i = 0;
            int[] ints = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

            Console.WriteLine("调用方法前,参数值为:");
            Console.WriteLine("i=" + i);
            Console.WriteLine("ints[0]=" + ints[0]);

            Console.WriteLine("调用方法后,参数值为:");
            SomeFunction(ints, i);
            Console.WriteLine("i=" + i);
            Console.WriteLine("ints[0]=" + ints[0]);
        }

   输出:

           

4.ref参数

   使用ref关键字,可以使得值参数通过引用的方式传送给方法;此时,对该变量所做的任何改变都会影响原始值。调用方法时,也需要添加ref关键字。

        static void SomeFunction(int[] ints,ref int i)
        {
            ints[0] = 100;
            i = 100;
        }

        static void Main(string[] args)
        {
            int i = 0;
            int[] ints = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

            Console.WriteLine("调用方法前,参数值为:");
            Console.WriteLine("i=" + i);
            Console.WriteLine("ints[0]=" + ints[0]);

            Console.WriteLine("调用方法后,参数值为:");
            SomeFunction(ints,ref i);
            Console.WriteLine("i=" + i);
            Console.WriteLine("ints[0]=" + ints[0]);
        }

   输出:

              

5.out参数

   使用out关键字,可以使得传递给方法的变量不初始化。调用方法时,也需要使用out关键字。

        static void SomethingFunction(out int param)
        {
            param = 100;
        }

        static void Main(string[] args)
        {
            int param;
            SomethingFunction(out param);
            Console.WriteLine(param);//输出:100
        }

6.命名参数

   参数一般需要按定义的顺序传送给方法。但命名参数则可以按任意顺序传递。若方法有多个参数,可以在同一个调用中混合使用位置参数和命名参数。

    public class Test
    {
       public void FullName(string firstNamse,string lastName)
        {
            Console.WriteLine(firstNamse + " " + lastName);
            return;
        }        
    }

   以下两种调用方式输出相同内容:

            Test test = new Test();
            test.FullName("Yunyun", "Zhao");
            test.FullName(lastName: "Zhao", firstNamse: "Yunyun");

7.可选参数

   可选参数必须设置默认值,同时是方法定义中的最后参数

        public void OptionalMethod(int notOptional,int optional=10)
        {
            Console.WriteLine(notOptional + optional);
        }

8.方法重载

   在同个一类中,方法名相同,但参数列表不同(即参数个数、类型和顺序不同),和返回类型、参数名称无关。

        public void DoSomething(int param1) { }

        public void DoSomething(int param1,int param2) { }

        public void DoSomething(int param1,double param2) { }

        public void DoSomething(double param1,int param2) { }

 

参考书籍:《C#高级编程(第9版)》

posted on 2018-02-01 16:01  雪溪  阅读(1199)  评论(0编辑  收藏  举报