15-01-06 C# 面向过程 07

我们在Main()函数中,调用Test()函数,我们管Main()函数称之为调用者,管Test()函数为被调用者;

如果被调用者想得到调用者的值

1.传递参数

2.使用静态字段来模拟全局变量;

C#里面并没有全局变量,但是我们一般能用一个静态的字段来实现跟全局变量一样的功能;也就是说这个字段全部的方法都可以使用;

静态字段应该与方法平级,写在类里面,方法外面,因此字段的使用范围是整个类,因为它的作用域;所以可以当做全局变量;

声明在方法外面,类里面的一般是字段;声明在方法里面的一般称之为变量;

因此字段可以加访问修饰符;变量不能加访问修饰符;

public  static int _number = 10;

有可能我们实现一个功能要有多个方法,写这多个方法的时候可能会用到同一个变量;

第一种方式把这些变量以参数的形式一个一个传进来;

第二种方式是当多个方法都需要相同的变量的时候,可以把这个变量声明为字段,这样不用传参数也能访问到;

把方法共同用到的变量写成静态字段;这样方便使用;

方法是和Main方法平级的;

如果调用者想得到被调用者的值;

1.返回值;

写完方法后必须写文档注释;

不管是形参还是实参都是在内存中开辟了空间的;

封装方法最简单的方法,选中要封装成方法的代码,右键,重构,提取方法。

写方法的原则:

1.方法的功能一定要单一;

2.方法中最忌讳的就是出现提示用户输入的字眼;

形参和实参只要类型和数量一样就可以了;名字不一定要一样

判断用户只能输数字,用Convert转换,配合try catch即可   判断用户只能输yes和no则只要||配合if else即可

在方法中有三个高级参数,out ref params

1,out

如果一个方法要返回多个值,但是这多个值是同一种类型,我们可以考虑返回一个数组;

如果一个方法要返回多个值,但是这多个值的类型不同,我们就要用到out参数;

out参数就侧重于在一个方法中可以返回多个不同类型的值;也可以返回多个相同类型的值;

public  static  void Test(int[] numbers , out int max , out int min , out int sum , out int avg,out bool b,out string s)//形参上out表示要多于返回的参数;
{

}

这个方法本质上没有返回值,但是我用out参数多于的返回了4个参数回去;

out参数要求必须在方法的内部为其赋值;因为我们要给它返回值;

int[] numbers={0,2,4,6,8};

int max ;

int min ;

int sum ;

int avg ;

bool b;

string s; //没必要给这些变量赋值,因为它们的值是从方法中来的;

Test(numbers,out max,out min,out sum,out avg,out b,out s);

Console.WriteLine(max);

Console.WriteLine(min);

Console.WriteLine(sum);

Console.WriteLine(avg);

Console.WriteLine(b);

Console.WriteLine(s);

//用out返回的值不需要用return;能够帮组我们在一个方法中返回多个不同类型的值;

public static bool IsLogin(string username,string pwd,out string msg)
{

}

//如果不写返回值的话可以这样;
public static void IsLogin(string username,string pwd,out string msg,out bool b)
{
 
}

string name = Console.ReadLine();

string pwd = Console.ReadLine();

string msg;

bool b = IsLogin(name,pwd,out msg)

再次声明,out参数在使用的时候,方法内部必须给out参数赋值;但是在方法外部不用给out变量赋值,它的值是在方法内部传出来的;

什么时间做什么事,这个原则你掌握了,你就是真正的长大了;

int num;

bool b = int.TryParse("123",num);

如果"123"能够成功转换为int类型,那么返回true;并将转换后的值赋值给num;如果"123"不能成功转换为int类型的值,那么返回false,num的值就是0;

int.TryParse()方法的实现

public static bool MyTryParse(string s , out int num)
{
     num = 0;
     try
     {
       num = Convert.ToInt32(s);
       return true;
      }
      catch
      { 
       return false;  
      }
}

2.ref

static void Main(string[] args)
{
  double salary = 5000;
  JiangJin(5000);
  Console.WriteLine(salary);    //输出的Salary依然是5000;
  Console.ReadKey();
}

public static void JiangJin(double s)
{
  s+=500;
}

static void Main(string[] args)
{
  double salary = 5000;
  double s = JiangJin(5000);
  Console.WriteLine(s);    //输出的Salary是5500;
  Console.ReadKey();
}

public static double JiangJin(double s)
{
   s += 500;
   return s;
   
}

如果调用者想得到被调用者的值; 返回值;

要是有这样一个东西,能够在方法里面能够改变变量之后,外面也能跟着改变,ref参数能做到这么一件事

static void Main(string[] args)
{
  double salary = 5000;
  JiangJin(ref salary);
  Console.WriteLine(salary);    //输出的Salary是5500;
  Console.ReadKey();
}

public static void JiangJin(ref double s)
{
  s+=500;
}

public static void JiangJin(ref double s)传参的时候要用到ref,

JiangJin(ref salary);调用的时候也要用到ref

ref参数,能够将一个变量带入一个方法进行改变,改变完成之后,再将改变后的值带出方法;用ref参数的好处就是我们不需要写返回值了;

交换两个变量的值

1.第三方变量;

2.两个变量的加加减减

用方法来封装

public static void Test(int n1,int n2)
{
   int temp = n1;
   n1 = n2;
   n2 = temp;
}

int n1 = 10;
int n2 = 20;
Test(10,20);
Console.WriteLine(n1);
Console.WriteLine(n2);

值依然没有改变,因为如果要改变额话必须要满足:如果调用者想得到被调用者的值; 返回值;它没有使用返回值返回,所以没有改变;

public static void Test( ref int n1,ref int n2)
{
   int temp = n1;
   n1 = n2;
   n2 = temp;
}

int n1 = 10;
int n2 = 20;
Test(ref 10, ref 20);
Console.WriteLine(n1);
Console.WriteLine(n2);  值改变了;

ref参数和out参数不一样,out参数必须在方法内部赋值,ref参数则必须在方法外部已经赋值;为什么要在方法外部赋值,因为ref的作用就是把变量带到方法里面进行改变,如果没有赋值,
就改变不了;ref参数要求在方法外必须为其赋值,方法内可以不赋值;

3.params

int[] s = {1,2,3,4};

Test("张三",s);

public static void Test(string name, int[] score)

Test("张三",1,2,3,4); //params把里面的几个数字处理为int[] score里面的元素;

public static void Test(string name,params int[] score)

params int[] score 可变参数数组;实际上数组长度不可变,只是用params模拟一下;

params可变参数;将实参列表中跟可变参数数组类型一致的元素都当做数组的元素去处理;

看到params修饰的数组,有两个选择

1.填跟数组类型一致的元素进去;

2.填一个相应类型的数组进去;

public static void Test(string name,params int[] score,int id)//错的

public static void Test(string name,int id,params int[] score)//对的

params可变参数必须是形参列表中的最后一个元素;

一个参数列表中只能出现一个可变参数;

params修饰的是数组,而不是单个元素;

int[] sum = {1,2,3,4,5};

int sum = GetSum(sum);

int sum = GetSum(1,2,3,4,5,6,7);

public static int GetSum(params int[] n)
{
  int sum = 0;
  for( int i = 0;i < n.length; i++)
  {
      sum += n[i];
   }
  return sum;
}

程序员上班之后一定要锻炼;

方法的重载

方法的重载指的就是方法的名称相同,但是参数不同;

参数不同,分为两种情况

1.如果参数的个数相同,那么参数的类型就不能相同;

2.如果参数的类型相同,那么参数的个数就不能相同;

方法的返回值跟重载没有关系;

方法的递归

方法自己调用自己;

静态字段可以充当全局变量,在整个类中都可以访问到,静态字段和非静态字段的区别是静态字段可以直接访问,非静态字段要创建对象的实例才能访问;

public static int i = 0;

public static void TellStory()
{
   Console.WriteLine("从前有座山");
   Console.WriteLine("山里有座庙");
   Console.WriteLine("庙里有个老和尚");
   i++;
   if(i >= 10)
   {
    return
    }
   TellStory()
}

递归一次画一个圈,递归一次再里面画一个圈,递归10次到了里面第10个圈。出来的时候不可能一次性出来,而是一个一个慢慢出来;

当调试过程中将要进入一个方法的时候,按F10可以跳过方法,进入下一条语句,这个叫做逐过程调试;

时间: 2024-10-12 10:24:15

15-01-06 C# 面向过程 07的相关文章

(一)Python入门-6面向对象编程:01面向对象和面向过程区别-对象的进化

面向对象: 面向对象(Object oriented Programming,OOP)编程的思想主要是针对大型 软件设计而来的.面向对象编程使程序的扩展性更强.可读性更好,使的编程可以像搭 积木一样简单. 面向对象编程将数据和操作数据相关的方法封装到对象中,组织代码和数据的方式 更加接近人的思维,从而大大提高了编程的效率. Python完全采用了面向对象的思想,是真正面向对象的编程语言,完全支持面向 对象的基本功能,例如:继承.多态.封装等. Python中,一切皆对象.我们在前面学习的数据类型

【C++系列小结】面向过程的编程风格

前言 编程语言有面向过程和面向对象之分,因此编程风格也有所谓的面向过程的编程和面向对象的编程,而且语言的性质不会限制编程的风格. 这里主要说一下面向过程的编程. "面向过程"(Procedure Oriented)是一种以过程为中心的编程思想. C语言是面向过程的编程语言,但是依然可以写出面向对象的程序,同样C++也当然可以写出面向过程的程序咯. 如果我们把所有的程序代码都写在一个main函数里面,那么这个程序显然会显得很不和谐吧.理想一点的做法是我们把一些看起来和main函数逻辑上关

海涛师兄指的路--指点汇总--各种装逼利器---15.01.27

14.11.10--科学楼226 C primer plus 代码敲两边许英杰老师 ---------------------------- www.gfsoso.com谷粉搜搜正点原子.安富莱(bbs.armfly.com) 资料: 别人的教程:原子的.野火的 user manual(中文用户手册) datasheet -----------------------------------1.stm32启动---->搞懂时钟(1)2.流水灯(1)3.串口.(1)4.stm32+emwin+uc

渐进式编码规范,一步步从面向过程到面向对象

学习js这么久了,一步步见证着自己的成长,看到别的大牛的代码,一步步去完善自己,今天,我就来通过一个简单的实例来记录自己的进步. 通过输入框输入字符串,来显示输入的字符数量. 1.函数式编程(初出新手村)不建议使用 //面向过程的变成方式,不推荐 window.onload=function(){ var $=function(id){ return document.getElementById(id); }; var oInput=$("input_word"); var getN

python/面向过程的编程思想及举例

python基础--面向过程的编程思想及举例 面向过程的编程思想 1.面向过程的编程思想及举例 写程序时: 要先想功能,分步实现 2. os模块中walk输出目录中文件路径 os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下. Send可以传多个值,但是必须是元组类型 面向过程的编程思想 像流水线,代码简洁,体系结构 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

python基础---面向过程编程

面向过程编程 核心是过程二字,过程即解决问题的步骤,基于面向过程去设计程序就像是在设计一条工业流水线,是一种机械式的思维方式 优点:程序结构清晰可以把复杂的问题简单化,流程化 缺点:可扩展性差,一条流线只是用来解决一个问题 应用场景:linux内核,git,httpd,shell脚本 练习:过滤目录下文件内容包含error的文件 grep –rl 'error' /dir 使用os模块walk方法: os.walk会把目录下的二级目录和文件做成一个迭代器,多次使用实现文件路径的拼接 #grep 

PHP中用mysqli面向过程打开连接关闭mysql数据库

代码如下: 1 <meta http-equiv="content-type" content="text/html" charset="utf-8"/> 2 <h1>用mysqli面向过程方法连接数据库!-姚远的博客</h1> 3 <form method="POST" action="<?php echo iconv("GB2312","

大话JS面向对象之扩展篇 面向对象与面向过程之间的博弈论(OO Vs 过程)------(一个简单的实例引发的沉思)

一,总体概要 1,笔者浅谈 我是从学习Java编程开始接触OOP(面向对象编程),刚开始使用Java编写程序的时候感觉很别扭(面向对象式编程因为引入了类.对象.实例等概念,非常贴合人类对于世间万物的认知方式和思考方式.对于复杂的事物,人类是如何去认识.归纳.总结的?面向对象式编程就是在努力回答这个问题,而答案的核心就是两个字:抽象.所以面向对象式编程特别适合处理业务逻辑,因此被广泛应用于目前的软件开发当中.因为我们开发软件就是为了解决问题,面向对象式编程符合人类对于“问题”的认知方式),因为我早

3 面向过程与面向对象进一步比较

编程范式 编程即写程序or写代码,具体是指程序员用特定的语法+数据结构+算法编写代码,目的是用来告诉计算机如何执行任务 . 如果把编程的过程比喻为练习武功,那么编程范式指的就是武林中的各种流派,而在编程的世界里最常见的两大流派便是:面向过程与面向对象. "功夫的流派没有高低之分,只有习武的人才有高低之分",在编程世界里更是这样,面向过程与面向对象在不同的场景下都各有优劣,谁好谁坏不能一概而论,下面就让我们来详细了解它们. 面向过程的程序设计 概念: 核心是"过程"二