当前位置: 首页 > article >正文

C#方法作用

C#方法

方法的定义与调用

首先我们要知道什么是方法,为什么要去使用方法?

方法就是把一些相关的语句组织在一起,用来执行的语句块

每一个C#程序至少有一个带有Main方法

   static void Main(string[] args)
   {   
   //方法的定义,一般情况下,写在一个类中
   // 格式: 访问修饰符  返回值  方法的名字(){
   // 方法体
   // }

   //访问修饰符: public 公开的
   //返回值类型 :  void  没有返回值
   //方法的名字: 随便定义即可   以大驼峰命名

   Test();
}
 public static void Test()
 {
     Console.WriteLine("我是一个方法");
 }

方法的参数

   static void Main(string[] args)
   {
       //方法的参数
       //参数: 形参和实参
       //形参: 形式参数,方法在定义的过程时候,生命在括号里面的变量,这个参数由实参决定
       //实参: 实际参数,方法在调用的时候,写在括号里面的数据,这个数据就会赋值给对应的形参
       Test("实参");
       TestT(5);
       TestTT(3, "实参");
      // TestTT( "实参",3); 这个构造函数的位置顺序要一样
       //注意,参数位置必须一致
   }
   public static void Test(string name)
   {
       //实参传递什么,形参就是什么
       Console.WriteLine(name);
   }
   public static void TestT(int number)
   {
       for (int i = 0; i < number; i++)
       {
           Console.WriteLine("你好");
       }
   }
   public static void TestTT(int number,string name)
   {
       for(int i = 0;i < number;i++)
       {
           Console.WriteLine(name);
       }
   }

方法的返回值

  static void Main(string[] args)
  {
      //方法返回值  int string void 
      Num(10,20);

  }
  //方法通过返回值,将方法内部得到的结果返回给调用的地方
  //需要在定义方法的时候,指定方法的返回值类型,如果没有返回值   写void
  public static int Num(int x,int y)
  {
      return x + y;
      //注意:return关键字不仅用于返回数据,还可以用于终止方法的执行(return后面的方法就不会执行)
  }

方法参数的传递

  1. 值传递:传递的是变量,方法内部改变不会受外界影响

  2. 引用传递:传递的是内存地址,方法内部改变,外部也会受到影响
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 方法返回值
{
    internal class Program
    {
        static void Main(string[] args)
        {
         
            //值传递  --------传递值类型
            //方法在调用的时候,如果传入的是变量,或者表达式,都会先进行计算,然后进行传递
            //方法调用传递变量,传递过去的是这个表达式或者变量的值,而不是变量本身
            
            int a = 10;
            int b = ++a;
            Test(b);      //11
            Test(b + 10); //21

            Console.WriteLine("b的值是"+b);//11

            // 值传递-----传递引用类型
            //当给方法传递一个引用类型的时候,传递的也是变量里面里面保存的值
            //只不过引用类型的变量存储的是内存地址,所以传递进入的是内存地址,相当于两个地方操作的是一个内存地址,一个改变,另一个也会改变
            People people = new People() { Name = "马超" };
            
            TestT(people);
            Console.WriteLine(people.Name);

        }
        public static void Test(int x)
        {
            Console.WriteLine("传入的参数式"+x);
            x = 40;//内部改变,外部输出,不会受影响
        }
        public static void TestT(People p)
        {
            Console.WriteLine("传入的参数是"+p.Name);
            p.Name = "小丑";
        }
       
    }
    class People
    {
        public string Name;
    }
    //注意: 值传递(值参数):这个名字和传递的数据类型没有关系,是因为传递进函数内部的是变量里面保存的值,所以才叫做值传递
}

引用传递

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 引用传递
{
    internal class Program
    {
        static void Main(string[] args)
        {

            //引用传递(引用传参):当传递一个值类型的时候,方法内部修改形参,会影响到外部,当方法内部需要修改传递进来的变量的时候,就需要使用引用传递

            int a = 10;
            Test(ref a);//传递参数的时候必须加上ref关键字
            Console.WriteLine("a的值是"+a);

            //定义一个函数,用来交换a和b的值
            int b = 10;
            int c = 20;
            YU(ref b, ref c);
            Console.WriteLine("b值是"+b);

            People people = new People() { Name="曹操"};
            TestT(ref people);
            Console.WriteLine(people.Name);

        }
        //在定义方法的时候,给某个形参前面加上ref关键字,这个参数就进行引用传递(直接传递变量本身)
        public static void Test(ref int x)
        {
            Console.WriteLine("传入的参数是"+x);
            x = 666;
        }
        public static void YU(ref int x,ref int y)
        {
            (x,y)=(y,x);//这是一个语法糖
        }
        public static void TestT(ref People p)
        {
            //修改了p里面保存的内存地址
            //默认情况下 进行的是值传递 内部修改不会影响外部

            //加上ref之后  是进行的引用传递, 在方法内部把p保存的内存地址修改之后,会影响到外部p1保存的内存地址
            p = new People() { Name="张飞"};
            Console.WriteLine("传入的参数是"+p.Name);
        }
    }
    class People
    {
        public string Name;
    }
}

out输出参数

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OUT
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int a = 6;
            int b = 7;
            Test(ref a, ref b);
            Console.WriteLine("a和b的值是"+a+b);

            int c = 10;
            int d = 20;
            TestT(out c, out d);
        }
        public static void Test(ref int x,ref int y)
        {
            Console.WriteLine($"x的值是{x},y的值是{y}");
            x = 60;
            y = 70;
        }
        public static void TestT(out int x, out int y)
        {
            x = 60;
            y = 70;
            Console.WriteLine($"x的值是{x},y的值是{y}");
           
        }
    }
}
//总结:
//ref和out的区别
//1.out传递参数,可以不用赋值
//2.out传递参数,必须在方法中进行赋值
//3.ref传递参数,可以在方法中获取值,out传递参数,只能在赋值之后取值(out不能传递进去数据)

//ref 的主要作用是为了传入数据,因此传入的时候必须赋值
//out 的主要作用是为了传出数据,因此在传入的时候可以不进行初始化,并且在方法中必须赋值


http://www.kler.cn/a/525499.html

相关文章:

  • ICSE‘25 LLM Assistance for Memory Safety
  • ES2021+新特性、常用函数
  • 2501,20个窗口常用操作
  • SpringBoot中@Valid与@Validated使用场景详解
  • CMake常用命令指南(CMakeList.txt)
  • OpenCV:开运算
  • Java基础知识总结(二十八)--可变参数(...)、静态导入、枚举
  • JMeter插件 Arrivals Thread Group 源码解析:实现原理与性能测试中的应用
  • C24.【C++ Cont】结构体
  • springboot 简化 spring开发
  • 智能家居能源管理系统:Python与AI的完美结合
  • QT设置应用程序图标
  • LeetCode:56.合并区间
  • 工业相机常用词语解释
  • Vue.js 使用 Vuex 管理组件间的共享状态
  • 【GStreamer】GstBuffer的简单分析
  • 10.7 获得程序版本信息
  • 【DeepSeek】LLM强化学习GRPO Trainer详解
  • Baklib在知识管理效率提升中的独特价值与其他产品的比较探析
  • RocketMQ 中如何实现消息的可靠传递?
  • C++,STL 简介:历史、组成、优势
  • 9.1 LangChain深度解析:大模型应用开发的“万能胶水”与核心架构设计
  • 数论问题77一一3x+1问题
  • 【deepseek实战】绿色好用,不断网
  • UE5制作视差图
  • 热更新杂乱记