随便玩玩之C# 12 方法函数

随便玩玩之C# 12 方法函数

方法是能够完成一定功能的语句块。也叫函数。

程序是一条流水线,方法就是流水线上的一个功能模块。橙汁的生产流程有清洗、削皮、压榨、过滤、提汁、装瓶。生产橙汁的过程是一个程序,每一个步骤就是一个功能模块,也就是方法或函数。

方法参数,就是传递给方法的值或对象。就像流水线上传给削皮机器的橙子。

方法返回值,就是方法返回经过计算的结果。就像流水线上削皮机器削完皮的橙子。方法也可以不需要返回值,就像橙汁装瓶,橙汁装进瓶子里就结束了。如果还要装箱,那就继续返回到流水线上,传递给装箱的流水线功能模块。

1.定义一个方法

先看最基本的程序,其实也包含了一个方法,就是main方法。程序的入口就是main方法:

using System;

namespace Method
{
    public class Program
    {
        // main方法是程序的入口,相当于程序的流水线。
        static void Main(string[] args)
        {
            // main方法的内部,就是一条流水线。
            // 每一条语句按顺序执行。

            Console.WriteLine("橙子榨汁");
            
            Console.ReadKey();
        }
    }
}

  控制台最基本的程序,包含了命名空间声明(第3行),类声明(第5行),方法声明(第8行)。

static void Main(string[] args)
{
}

 Main方法声明这一行包括方法的修饰类型,static表示这是静态方法,可有可无,未指定方法类型是默认为public修饰类型。

void表示这是无返回时方法,每个方法必须具有返回类型。可以是字符串(string)、整形(int)等。

Main是方法名称,方法名称后的括号里的内容表示参数,参数可有可无,后面的一对大括号表示方法体的内容。

我们可以自己定义一个方法,然后调用方法。

using System;

namespace Method
{
    public class Program
    {
        static void Main(string[] args)
        {
            OutPutText();

            Console.ReadKey();
        }

        static void OutPutText()
        {
            Console.WriteLine("橙子榨汁");
        }
    }
}

 上面代码,第14-17行声明了一个静态的无返回值的无参数的OutPutText()方法,然后在Main()方法中调用了这个方法。

输出如下:

 

2.带参数的方法

这里只是很简单的代码,当然看不出使用自定义方法的优势。回想一下,计算两个整数相加的代码。

using System;

namespace Method
{
    public class Program
    {
        static void Main(string[] args)
        {
            int a = 3, b = 5;
            int c;
            c = a + b;
            Console.WriteLine(c);

            Console.ReadKey();
        }
    }
}

 先声明两个整数变量并赋值,再声明一个变量保存相加的结果,再输出结果。这一切看似很完美。假如有10个这样的计算题呢,答曰当然是写10次这样的代码啊,没毛病啊。

其实,使用可传入参数的方法更简单。

下面,定义一个可参入参数的方法。

using System;

namespace Method
{
    public class Program
    {
        static void Main(string[] args)
        {
            Sum(3, 5);

            Console.ReadKey();
        }

        static  void Sum(int x,int y)
        {
            int z = x+y;
            Console.WriteLine(z);
        }
    }
}

 上面第14-18行定义了一个Sum()方法。

第14行Sum(int x,int y)方法的括号中有两个参数,这个叫形参,简单理解就是占位符,先占着两个坑位。两个参数的类型都是int,表示这个方法可以接受传入两个整数当作参数。

参数要先指定类型,再指定形参名称。两个参数用逗号隔开。

第16行是声明一个整数变量z,存放x+y的计算结果。

第17行是输出结果。

想象一下这个自定义方法就是一个扳手,固定的口径,对着螺丝拧一拧,螺丝拧好了,程序也就结束了。

在第9行,main()方法中,调用了这个方法,给方法传入了2个参数。这个方法经过计算后,输出了结果。两个可用于计算的参数叫实参。

10个整数加法计算题,就在main()方法中写调用10次sum()方法即可。

using System;

namespace Method
{
    public class Program
    {
        static void Main(string[] args)
        {
            Sum(3, 5);
            Sum(3, 6);
            Sum(3, 2);
            Sum(3, 3);
            Sum(45, 8);
            Sum(30,9);
            Sum(23, 17);
            Sum(12, 20);
            Sum(67, 1);

            Console.ReadKey();
        }

        static  void Sum(int x,int y)
        {
            int z = x+y;
            Console.WriteLine(z);
        }
    }
}

 

 

3.带返回类型的方法

 还是刚刚的加法计算。修改一下。

using System;

namespace Method
{
    public class Program
    {
        static void Main(string[] args)
        {
            Sum(3, 5);

            Console.ReadKey();
        }

        static  int  Sum(int x,int y)
        {
            int z = x+y;
            return z;
        }
    }
}

 修改了sum()方法的返回类型为int,删除了输出语句,添加了返回语句,返回变量z。

此时我们运行程序,没有输出结果。为什么呢?因为方法只是返回了整数数值,没有在控台输出的语句。在main()方法中加上输出语句即可。

using System;

namespace Method
{
    public class Program
    {
        static void Main(string[] args)
        {
            
            Console.WriteLine(Sum(3, 5));

            Console.ReadKey();
        }

        static  int  Sum(int x,int y)
        {
            int z = x+y;
            return z;
        }
    }
}

 

如上图,sum(3,5)返回的是一个整数值,可以直接使用Console.WriteLine()输出。

思考一下,在sum()方法中有一个整数变量z,那么在main()方法中能不能使用Console.WriteLine(z)来显示结算结果呢。尝试一下。

答案是不能,VS提示代码有错误。当前上下文中不存在名称z.

明明有z啊,为什么?这是变量的作用域在起作用。一个变量只在围绕它的最近的大括号内起作用。超出了这个大括号这个变量就不能被使用了。

既然sum()返回的是一个数值,那么,能不能把它赋值给另一个变量。当然可以。

using System;

namespace Method
{
    public class Program
    {
        static void Main(string[] args)
        {
            int c = Sum(1, 2);
            Console.WriteLine(c);

            Console.ReadKey();
        }

        static  int  Sum(int x,int y)
        {
            int z = x+y;
            return z;
        }
    }
}

 结果如图。

 

4.在WPF中使用自定义方法。

这个例子是几个控件的组合使用。

新建一个WPF项目,解决方案命名为WPFCustomMethod。

 从工具箱像WPF设计器拖放2个TextBox控件,3个label控件,1个button控件。

2个TextBox控件的名称分别修改为textbox1,textbox2。

3个label控件第1个修改content属性为+,第2个修改content属性为=,第三个label控件的名称修改为result,content属性改不改无所谓。

 

双击button控件,输入一下代码。

private void Button_Click(object sender, RoutedEventArgs e)
        {
            // 在result控件中显示计算结果
            // 其中两个textbox的text属性的值需要从string类型转换成int类型。
            result.Content = Sum(Convert.ToInt32(textbox1.Text), Convert.ToInt32(textbox2.Text));
        }

        static int Sum(int x, int y)
        {
            return x + y;
        }

 运行程序,在两个文本框中输入数字,点击计算按钮。结果显示在第三个label控件上。

 

 

 

参考资料:

1.C#方法

https://learn.microsoft.com/zh-cn/dotnet/csharp/methods

2.方法和函数的区别:只不过是面向过程和面向对象中的不同称呼。

https://www.zhihu.com/question/507260300/answer/2296848619

https://zhuanlan.zhihu.com/p/449835027

 

posted @ 2023-02-23 21:11  冲浪的奶糖  阅读(198)  评论(0编辑  收藏  举报