当前位置:
首页
文章
后端
详情

C# 编程学习系列(十)方法

1、什么是方法?

方法即将相关的代码语句组织在一起,用来执行一个任务的代码块。

那么方法的作用是什么?

一是减少冗余代码,让程序看起来不那么臃肿杂乱。

二是便于后期阅读和维护代码。

例如:挖矿这件事儿。

如果没有专门的方法,那么每一次挖矿,就需要写一次关于挖矿的全部代码。这样下来,代码就会非常多,而且在后面要修改代码的时候,每个位置都要修改,可谓麻烦至极。

而有了方法,只需要将挖矿的一系列操作丢进一个方法里面,当你要挖矿的时候,只要调用该方法,就可以了。后面计算是要增删改方法中的功能,也只需要对这一个方法进行操作即可。

2、方法的组成

方法组成格式:

<访问修饰符> [static] <返回类型> <方法名>(参数类型1 参数名1,参数类型2 参数名2...)
{
    方法体
}

  • 访问修饰符:决定了该方法能否被其他类可见。例如:public ,是所有人可见;而 private,只能自己可见。
  • static:表示静态,在某个类中是唯一的。若方法用static修饰,不需要实例化类对象,可以直接类名点方法名调用;如果没有static修饰,则需要实例化类对象来使用。
  • 返回类型:决定了方法最后返回值的数据类型。这里除了 void 不需要 return,其他所有类型都需要 return 来返回值。
  • 方法名:即方法的名字,当将方法写好,要调用方法的时候,可以直接通过方法名来调用。
  • 参数:参数可以有多个,也可以没用。每个参数都要有对应的数据类型和参数名,参数名是在方法中调用。
  • 方法体:即要实现某个任务写的代码语句。

3、方法调用实例

(1)不使用static修饰:

class c1{
    static void Main(string[] args){
        int n1 = 20;
        int n2 = 30;
        c1 c1 = new c1();
        int count = c1.addNum(n1, n2);
        Console.WriteLine($"{n1}+{n2}={count}"); // 20+30=50
    }

    
    public int addNum(int num1, int num2){
        int num = num1 + num2;
        return num
    }
}

(2)使用static修饰:

class c1{
    static void Main(string[] args){
        int x = 300;
        int y = 100;

        
        c2.swap(x, y);
        Console.WriteLine($"交换后,x为{x}, y为{y}");
    }
}


class c2{
    public static void swap(int n1, int n2){
        Console.WriteLine("我真的被调用了!");
        int temp = n1;
        n1 = n2;
        n2 = temp;
    }
}

从打印结果可以知道,c2 中的 swap 方法确实已经被调用了,可是结果没有改变。

这是因为该方法所使用的是按值传递参数,方法中的 n1 和 n2 是形参,而调用方法时 x 和 y 是实参。实参和形参是在两个不同内存中的值,当调用方法的时候,实参的值会赋值给形参。这时候形参虽然发生了改变,但也不会影响到实参的值。

如果想要获得结果,要将返回类型 void 改为 int,在结尾return回两个值。调用方法的时候,将值赋给x和y即可。

除此之外,还有其他的方法来解决该问题。

4、参数传递

参数传递的方式有三种,分别是:按值传递参数、按引用传递参数和按输出传递参数。按值传递参数上面已经有了展示,就不多介绍了。

(1)按引用传递参数

引用参数是一个对变量的内存位置的引用。当按引用传递参数时,与值参数不同的是,它不会重新为这些参数创建一个新的存储位置。引用参数与提供给方法的实际参数是具有相同的内存位置。

换句话说,形参改变了,那么实参也将会改变。

注:在C#中,引用参数是需要用ref关键字来声明的。

class c1{
    static void Main(string[] args){
        int x = 300;
        int y = 100;

        
        Console.WriteLine($"交换前,x为{x}, y为{y}");

        
        c2.swap(ref x, ref y);
        Console.WriteLine($"交换后,x为{x}, y为{y}");
    }
}


class c2{
    public static void swap(ref int n1, ref int n2){
        int temp = n1;
        n1 = n2;
        n2 = temp;
    }
}

从结果来看,形参改变了,实参也发生了改变。

(2)按输出传递参数

return 语句可用于只从函数中返回一个值。但是,可以使用输出函数来从函数中反回两个值。输出参数会把方法输出的数据赋给自己,其他方面与引用参数相似。

注:输出参数需要用 out 关键字来修饰。

class c1{
    static void Main(string[] args){
        c1 c1 = new c1();
        int a = 100;
        Console.WriteLine($"调用方法前,a为{a}");
        c1.getValue(out a);
        Console.WriteLine($"调用方法后,a为{a}");
        c1.getValue(out int b);
        Console.WriteLine($"没有赋值,b为{b}");
    }

    
    public void getValue(out int x){
        int temp = 5;
        x = temp;
    }
}

和引用参数一样,输出参数一样是和实际参数是同样的内存地址,输出参数改变,实际参数也会改变。

不同的是,引用参数的实际参数需要赋值;而输出参数的实际参数只需要声明变量的类型,不需要变量初始值,它会自动将方法中的值赋给该变量。

5、总结

(1)方法是为了减少重复代码,便于后期的阅读和维护。

(2)方法的组成:访问修饰符、返回类型、方法名以及参数类型和参数名。

(3)静态修饰符 static,可有可无。有则可以直接通过类名点方法名来调用,没有则需要将类创建一个实例化。

(4)参数传递方式:按值传递参数、按引用传递参数和按输出传递参数。

关于C#方法的一些基本内容就到此结束了。

免责申明:本站发布的内容(图片、视频和文字)以转载和分享为主,文章观点不代表本站立场,如涉及侵权请联系站长邮箱:xbc-online@qq.com进行反馈,一经查实,将立刻删除涉嫌侵权内容。

同类热门文章

深入了解C++中的new操作符:使用具体实例学习

C++中的new操作符是动态分配内存的主要手段之一。在程序运行时,我们可能需要动态地创建和销毁对象,而new就是为此提供了便利。但是,使用new也常常会引发一些问题,如内存泄漏、空指针等等。因此,本文将通过具体的示例,深入介绍C++中的new操作符,帮助读者更好地掌握其使用。


深入了解C++中的new操作符:使用具体实例学习

怎么用Java反射获取包下所有类? 详细代码实例操作

Java的反射机制就是在运行状态下,对于任何一个类,它能知道这个类的所有属性和方法;对于任何一个对象,都能调用这个对象的任意一个方法。本篇文章将通过具体的代码示例,展示如何通过Java反射来获取包下的所有类。


怎么用Java反射获取包下所有类? 详细代码实例操作

员工线上学习考试系统

有点播,直播,在线支付,三级分销等功能,可以对学员学习情况的监督监控,有源码,可二次开发。支持外网和局域网私有化部署,经过测试源码完整可用!1、视频点播:视频播放,图文资料,课件下载,章节试学,限时免

员工线上学习考试系统

了解Java中的volati关键字的作用 以及具体使用方法

本篇文章将和大家分享一下Java当中的volatile关键字,下面将为各位小伙伴讲述volatile关键字的作用以及它的具体使用方法。


了解Java中的volati关键字的作用 以及具体使用方法

Java Map 所有的值转为String类型

可以使用 Java 8 中的 Map.replaceAll() 方法将所有的值转为 String 类型: 上面的代码会将 map 中所有的值都转为 String 类型。 HashMap 是 Java

Java Map 所有的值转为String类型