C#编程基础(下)第一课:理解编程的两种思想:面向过程和面向对象,C#中方法的定义和使

版权声明:王迪 https://blog.csdn.net/dnruanjian/article/details/85984141

知识点:面向过程和面向对象的编程思想、类和对象、C#中方法的定义和使用、方法的传参方式

1、编程的两种思想

编程的两种思想:面向过程、面向对象。

编程界的两大思想,其实一直贯穿在我们学习、生活和工作当中。通过“炒鱼香肉丝”的实例,来理解面向过程和面向对象两大思想。

  • 面向过程是具体化的,流程化的。回想一下,我们在学习和工作中,当我们去实现某项功能或完成某项任务时,是不是会不自觉的按部就班的罗列出我们要做的事情?当我们按着我们罗列的步骤去解决问题时,实质上就是按照面向过程的思想去解决问题。我们罗列的步骤就是过程,按照步骤解决问题就是面向过程。
  • 面向对象是模型化的,是一种对现实世界理解和抽象的方法。抽象出一个类,这是一个封闭的环境,在这个环境中有数据有解决问题的方法,你如果需要什么功能直接使用就可以了,至于是怎么实现的,你不用知道。

通俗理解:面向过程就是什么事都自己做(自己炒菜),面向对象就是什么事都指挥对象去做(让厨师炒菜)

像流行的JAVA或C#等就是纯粹的面向对象的语言。我们把需要的任务,单独指派给特定的对象,可以由更专业的人去完成,我们可以不用关心这个对象怎么实现的,我们只管使用!

面向对象的优点:易维护、质量高、效率高、易扩展

 

2、类和对象

2.1 类和对象的概念理解

面向对象程序设计(OOP)是一种程序设计的泛型,同时也是一种程序开发的方法。C#是完全面向对象的一种语言,C#程序都以类class为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。

  • 对象现实世界中的实体(世间万物皆对象)
    • 对象是用来描述客观事物的一个实体,由一组状态和行为构成。在面向对象的世界中状态又叫属性,行为又叫方法,所以对象是由属性和方法构成的。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。软件对象的状态就是属性,行为通过方法体现。在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。
  • 具有相似属性和方法的对象的集合
    • 类是对象的类型,是具有相同属性和方法的一组对象的集合。(类是一个模板,它描述一类对象的行为和状态。)

如:对于雇员类,下面就有一组雇员对象了,比如这下面的每个人,虽然长相、职位不同,但是都具有共同的属性,如:姓名、年龄、职位等,都有共同的方法,如:工作、领工资等。所以都属于雇员类。

相互关系:类是对象的抽象,对象是类的实例,类是一种抽象的分类,对象则是具体事物。

 

 

2.2  类的属性:

  • 事物的特性在类中表示为变量 (也就是说属性在代码中用变量来表示)
  • 每个对象的每个属性都拥有其特有的值 (一个类有存在大量的对象,比如:人类的对象就有在座的各位,虽然你们都有姓名属性,那是你们的姓名都不同)
  • 属性名称由类的所有实例共享(类的实例就是对象的另一种说法,还举刚才的例子:姓名这个属性名称由所有人类对象所共有)

 

2.3 类的方法

类的方法就是操作的实际实现,实现方法通常是由一个或多个步骤实现的。

举例:当一个裁缝对象执行缝制衣服的方法时,会调用缝制衣服的一系列步骤,首先是量尺寸,然后拿工具,最后开始缝衣服。

 

2.4 面向对象程序设计的特点:封装、继承和多态

  封装:面向对象技术中的封装,简单来说就是将代码及其处理的数据绑定在一起,形成一个独立单位,对外实现完整功能,并尽可能隐藏对象的内部细节 。
  继承:继承(Inheritance)也称作派生,指的是特殊类的对象自动拥有一般类的全部数据成员与函数成员(构造函数和析构函数除外)。
  多态:多态性(Polymorphism)是指一般类中定义的属性或行为,被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。

 

3、方法的定义

3.1 什么是方法

定义:一个方法是把一些相关的语句组织在一起,用来执行一个任务的语句块。每一个 C# 程序至少有一个带有 Main 方法的类。

作用:方法是C#中将一堆代码进行重用的一种机制。方法就是一段代码,这段代码可能有输入的值,可能会返回值。

通俗的比喻:一个方法就像是一口锅,而我们的米和水就像参数,把米和水放进锅里,然后就能做好饭。方法就是需要我们给它一些参数,然后它可能会给我们一些返回值。

3.2 怎么使用方法

要使用一个方法,您需要:

  • 定义方法
  • 调用方法

定义方法的格式:

访问修饰符  返回类型  方法名(参数列表)
{
      // 方法的主体…
}

方法在类或结构中声明,声明时需要指定访问级别、返回值、方法名称以及方法参数。方法参数放在括号中,并用逗号隔开。空括号表示方法不需要参数。

  • 访问修饰符:C#中的访问修饰符有:public、private、protected。public定义的方法,任何位置都可以访问,private定义的方法只有在类自身内部访问,protected定义的方法可访问域限定于类内或从该类派生的类内。
  • 返回值类型:方法调用后可能会返回一个结果,结果可能是任何类型,string、double、int等,也可能没有结果返回,那就是void(空)类型。
  • 方法名:方法名是这个方法的标识,如变量名,要求定义有明确的意思,让人顾名知意,如“ReadLine”、“Parse”等,命名要符合Pascal(帕斯卡命名法)命名法(由一个或多个单词相连,每个单词开头大写)。
  • 参数列表:由0个或多个参数构成,参数由“参数类型 参数名”构成,每个参数间用逗号隔开。

举例:

        public  static string HelloWord()//定义一个方法,没有参数
        {
            return "say hello";
        }
        public  static int Add(int a, int b)//定义一个方法,带有2个参数
        {
            int c = a + b;
            return c;
        }

方法的调用:

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

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请输入您的名字:");
            string name = Console.ReadLine();//接收用户输入的姓名信息
            Console.WriteLine(SayHello(name));//将name变量里的数据传送给方法,并调用方法SayHello
            Console.ReadLine();
        }
        public  static string SayHello(string name)//定义一个方法,起名SayHello,并给出一个参数
        {
            string words = "Hello! "+name;
            return words;
        }

    }
}

结果演示:

 

4、方法的传参

4.1 参数传递的定义

参数传递:是在程序运行过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据处理和返回的过程,方法有3种方式。

  • 值传递
  • 地址传递
  • 引用传递

 

4.2 形参和实参的区别

形参:在定义函数中指定的参数就是形参,在未出现函数调用时,他们并不占内存中的存储单元,只有在发生函数调用时,函数中的形参才被分配内存单元。在调用结束后,形参所占的内存单元也被释放。
实参:实参可以是常量、变量和表达式,但要求有确定的值。在调用时将实参的值赋给形参。在内存中,实参单元和形参单元是不同的单元。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留原值。

4.3 值传递和引用传递的区别

(1)值传递 

 C#默认都是值传递的,就是复制变量的一个副本传递给方法,所以在退出方法后,对变量的修改无效。

举例:

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

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 5, b = 10;
            Console.WriteLine("使用方法前,两个数的值分别为:a={0}, b={1}", a, b);
            Change(a, b);//使用方法Change();
            Console.WriteLine("使用方法后,两个数的值分别为:a={0}, b={1}", a, b);
            Console.ReadLine();
        }
        //定义一个方法,用来对数字a和b进行更改
        public static void Change(int a, int b)
        {
            a = a + 10;
            b = b + 10;
        }
    }
}

结果演示:

注意:当传递是引用类型时,因为引用类型是一个引用的地址,所以修改引用地址指向的对象时,一样会修改对象的值,这种现象不能当做引用传递。

(2)引用传递

 引用传递是把对象本身传递给方法,当在方法中对对象做修改时,退出方法后修改是有效的。

语法:定义方法时在参数前面加上ref,调用方法时也要在参数前加ref。

举例:

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

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 5, b = 10;
            Console.WriteLine("使用方法前,两个数的值分别为:a={0}, b={1}", a, b);
            Change(ref a, ref b);//使用方法Change();
            Console.WriteLine("使用方法后,两个数的值分别为:a={0}, b={1}", a, b);
            Console.ReadLine();
        }
        //定义一个方法,用来对数字a和b进行更改
        public static void Change(ref int a, ref int b)
        {
            a = a + 10;
            b = b + 10;
        }
    }
}

结果演示:

注意:在C#中引用传递需要在参数类型前加关键字 ref ,但是ref 的参数变量在使用前必须被初使化,可有时通过引用传递的变量初值是没意义的,这容易产生混淆。这时在C#中有另一关键字 out ,out 与 ref 关键字使用时效果一样,但是out关键字对变量可以不初使化,但是out关键字的变量在方法中必须给分配一个值,否则编译会不通过。

参数传递还包括以下示例:

====================这里是结束分割线==========================

 

 

 

猜你喜欢

转载自blog.csdn.net/dnruanjian/article/details/85984141