c#函数(方法)

方法的组成:

1.方法的修饰符,pubilic, static

2.方法的返回值,void没有返回值,有返回值的需要配合return

3.方法名称,命名规则同变量,一般大驼峰

4.形参列表,形参就是形式参数,将来使用方法时,会用实参来传递给形参

5.方法体,方法核心业务逻辑

封装成方法,调用方法,使用方法,根本目的,复用

通过类本身来调用的函数称为静态函数,通过类的实例来调用的方法称为实例方法,c#中方法必须要在类中定义,方法默认是私有的,只能在类中使用..

没有用static来修饰的方法称作实例 方法,实例方法必须通过类的个体来访问.

值传递特点:方法中修改了形参,不会影响外部的实参.引用传递:方法中修改了实参,影响外部的实参.实参的类型是引用类型中的string类型,传递特点与值传递一致,这是由于string类型在c#中特殊,重新修改了string后会生成新的字符,重新分配内存.方法传递类的实例时,是引用传递.修改实例的属性并没有给实例分配新的内存.

using System;
namespace ConsoleApp2
{
	class Program
    {
		/*
		 * 类中的函数,以后称方法
		 * 方法的组成:
		 * 1. 方法修饰符,public static
		 * 2. 方法的返回值,void没有返回值,有返回值,则需要配合return
		 * 3. 方法名称,命名规则同变量,一般大驼峰
		 * 4. 形参列表,形参就是形式参数,将来使用方法时,会用实参来传递给形参
		 * 5. 方法体,方法核心业务逻辑。
		 */
		public static void Main(string[] args)
		{
            // 使用方法,调用方法,封装成方法,根本的目的:复用。
            // 20, 30实际参数,简称参数
            Console.WriteLine(Program.Add(20, 30)); // 50

			//实例化类
			MyClass	myClass = new MyClass();
			//myClass.SayHello("C#很好"); // 报错,原因:访问权限问题
			Console.WriteLine(myClass.SayHello2("C#很牛"));
            Console.WriteLine(MyClass.SayHello3("C#很牛"));


			int a = 20, b = 30;
            // 值传递特点:方法中修改了形参,不用影响外部的实参。
            myClass.Add(a, b);
			Console.WriteLine($"方法Add()修改了形参x,y,但并不影响实参a,b,{a},{b}");

			// 引用传递特点:方法中修改了形参,影响外部的实参。
			int c = 20, d = 30;
			myClass.Add2(ref c, ref d);
            Console.WriteLine($"方法Add2()修改了形参x,y,影响实参c,d,{c},{d}");

			// 即使实参的类型是string引用类型,只要不使用ref关键字处理,还是值传递。这是由于string在C#比较特殊,重新修改了string后,会生成新的字符串,重新分配内存。
            string e = "aaa", f = "bbb";
            myClass.Add3(e, f);
            Console.WriteLine($"方法Add3()修改了形参x,y,但并不影响实参e,f,{e},{f}");

			// 此事例说明向方法传递类的实例,是引用传递。
			// 原因:修改实例的属性时,并没有给实例重新分配内存。
			Point p = new Point(30, 40);
			myClass.Add4(p);
            Console.WriteLine($"方法Add4()修改了形参p1,影响实参p,{p.X},{p.Y}");

			// 可以通过给字符串添加ref,让字符串传参时,是引用传递。
            string h = "aaa", i = "bbb";
            myClass.Add5(ref h, ref i);
            Console.WriteLine($"方法Add5()修改了形参x,y,影响实参h,i,{h},{i}");

			int j = 0;
			myClass.Add6(10, 20, out j);
			Console.WriteLine(j); // j就是从Add6()的形参c中传递过来的。

        }

        // 定义方法
        public static int Add(int x,int y) { 
			int c = x + y;
			return c;
		}
	}

	class MyClass
	{
		// C#中方法必须在类中定义
		// 方法默认访问权限是私有的private,只能在类中使用。
		string SayHello(string s)
		{
			return "我说:" + s;
		}

		// 没有使用static修饰符装饰的方法,称为实例方法。
		// 实例方法必须通过类的个体来访问。
		// 实例方法:即类的每一个实例都复制了一份方法的副本。
		public string SayHello2(string s)
		{
            return "我说:" + s;
        }

		// 使用static修饰符装饰的方法,称为静态方法。
		// 静态方法只能通过类本身来访问。不能通过类的实例来访问。
		// 静态方法:主要为了共享,静态方法只存在于类本身。
        public static string SayHello3(string s) {
            return "我说:" + s;
        }

		// 向方法中传递参数时,有两种情况:实参要么是值类型,要么是引用类型

		public void Add(int x, int y)
		{
			x = 10;
			y = 20;
			Console.WriteLine($"修改了参数后:{x},{y}");
		}

        // ref===Reference引用
		// 数据类型前有ref表示传递的数据是引用类型,是x的地址。
        public void Add2(ref int x, ref int y)
        {
            x = 10;
            y = 20;
            Console.WriteLine($"修改了参数后:{x},{y}");
        }

		public void Add3(string x, string y)
		{
			x = "hello";
			y= "world";
            Console.WriteLine($"修改了参数后:{x},{y}");
        }

		public void Add4(Point p1)
		{
			p1.X = 10;
			p1.Y = 10;
            Console.WriteLine($"修改了参数后:{p1.X},{p1.Y}");
        }

        public void Add5(ref string x, ref string y)
        {
            x = "hello";
            y = "world";
            Console.WriteLine($"修改了参数后:{x},{y}");
        }

		// 形参前加out关键字,这样的形参是:输出形参
		// 在外部调用Add6()时,可以用来个变量来接收输出形参c的值
		// int j = 0; myClass.Add6(10,20,out j);
		// 输出参数:形参向实参传递计算结果。
		// 输出参数可以代替return 语句。
        public void Add6(int x, int y, out int c)
        {
			c = x + y;
        }
    }

	class Point
	{
		public int X { get; set; }
        public int Y { get; set; }


        public Point(int x,int y)
		{
			X = x;
			Y = y;
		}

        public override string ToString()
        {
            return $"x坐标:{X},y坐标:{Y}";
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉玊则不达

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值