C#语言入门详解笔记(4)—P8、P9 方法的定义、调用与调试_1_2

C#语言入门详解_哔哩哔哩_bilibiliC#语言入门详解搬运,随youtube上进度更新。刘老师的C#视频教程到30集就告一段落了,感谢刘老师在这5年间的付出。能上youtube的同学可以去刘老师的主页观看,https://www.youtube.com/channel/UCmvAggiJGwJGSzAtqFRBQ7g重新上传,修复31P无声音问题https://www.bilibili.com/video/BV1wx411K7rb

目录

1、方法的由来

1.1、方法的前身是C/C++语言的函数(function)

1.2、永远是类的成员

1.3、是类(或结构体)最基本的成员之一

1.4、为什么需要方法和函数

2、方法的定义与调用

2.1、声明方法的语法详解

2.2、为方的命名规范

2.3、重温静态(static)方法和实例方法

2.4、调用方法

3、构造器(一定特殊的方法)

3.1、构造器(constructor)是类型的成员之一

3.2、狭义的构造器指的是“实例构造器”(instance constructor)

3.3、如何调用构造器

3.4、声明构造器

3.5、构造器的内存原理

4、方法的重载(Overload)

4.1、调用重载方法的示例

4.2、声明带有重载的方法

5、如何对方法进行debug

5.1、设置断点(breakpoint)

5.2、观察方法调用时的call stack

5.3、Step-in,Step-over,Step-out

5.4、观察局部变量的值与变化

6、方法的调用与栈*

6.1、方法调用时栈内存的分配


1、方法的由来

1.1、方法的前身是C/C++语言的函数(function)

  • 方法是面对对象范畴的概念,在非面向对象语言中仍然称为函数
  • 使用C/C++语言对比

1.2、永远是类的成员

  • C#语言中函数不可能独立于类(或结构体)之外
  • 只有作为类(结构体)的成员时才被称为方法
  • C++中是可以的,成为“全局函数”

1.3、是类(或结构体)最基本的成员之一

  • 最基本的成员只有两个——字段与方法(成员变量与成员函数),本质还是数据+算法
  • 方法表示类(或结构体)“能做什么事情”

1.4、为什么需要方法和函数

  • 目的1:隐藏复杂的逻辑
  • 目的2:把大算法分解为小算法
  • 目的3:复用(reuse,重用)
  • 示例:计算圆面积、圆柱体积、圆锥体积
    class Program
    {
        static void Main(string[] args)
        {
            Calculator c = new Calculator();
            Console.WriteLine(c.GetCylinderVolume(10, 100));
        }
    }
    class Calculator
    {
        public double GetCircleArea(double r)
        {
            //return 3.14159 * r * r;
            return Math.PI * r * r;
        }
        public double GetCylinderVolume(double r, double h)
        {
            return GetCircleArea(r)*h;
        }
        public double GetConeVolume(double r, double h)
        {
            return GetCylinderVolume(r, h) / 3;
        }
    }

自顶向下,逐步求精

2、方法的定义与调用

2.1、声明方法的语法详解

  • 参见C#语言文档(声明/定义不分家)

方法头或方法体 有效的修饰符组合 

  • Parameter全称为”formal parameter“——形式上的参数,简称”形参“
  • Parameter是一种变量

2.2、为方的命名规范

  • 大小写规范,帕斯扣法
  • 需要以动词或动词短语作为名字

2.3、重温静态(static)方法和实例方法

静态方法是类的方法,通过类名.方法名调用;

2.4、调用方法

  • Argument中文C#文档的官方译法为”实际参数“,简称”实参“;可以理解为调用方法时的真实条件 
  • 调用方法时的argument列表要与定义方法时的parameter列表相匹配

C#是强类型语言,argument是值,parameter是变量,值与变量一定要匹配,不然编译器会报错。

3、构造器(一定特殊的方法)

3.1、构造器(constructor)是类型的成员之一

3.2、狭义的构造器指的是“实例构造器”(instance constructor)

3.3、如何调用构造器

3.4、声明构造器

    class Program
    {
        static void Main(string[] args)
        {
            Student student = new Student();
        }
    }
    class Student
    {
        public int ID;
        public string Name;
    }

3.5、构造器的内存原理

4、方法的重载(Overload)

4.1、调用重载方法的示例

        static void Main(string[] args)
        {
            Console.WriteLine("Hello");
            Console.WriteLine(100);
            Console.WriteLine(200L);
        }

4.2、声明带有重载的方法

  • 方法签名(method signature)由方法的名称、类型形参(<T>)的个数和它的每一个形参(按从左到右的顺序)的类型和种类(值、引用或输出)组成。方法签名不包含返回类型。

  • 实例构造函数签名由它的每一个形参(按从左到右的顺序)的类型和种类(值、引用或输出)组成。

  • 重载决策(到底调用哪一个重载):用于在给定了参数列表的一组候选函数成员的情况下,选择一个最佳函数成员来实施调用。

通过传入参数类型判断调用哪一个重载。

5、如何对方法进行debug

5.1、设置断点(breakpoint)

5.2、观察方法调用时的call stack

 4层调用:

5.3、Step-in,Step-over,Step-out

Step-in:快捷键F11;观察函数执行顺序;用于逐步寻找错误发生处

Step-over:快捷键F10;直接获得结果;用于大范围查找错误

Step-out:shfit+F11;查看谁调用了当前方法;Step-in的反向操作

5.4、观察局部变量的值与变化

左下角

点击别针可以将结果固定在界面上

6、方法的调用与栈*

6.1、方法调用时栈内存的分配

  • 对stack frame的分析

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值