C#——方法的定义、调用与调试

方法的由来

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

方法是面向对象范畴的概念,在非面向对象语言中仍然称为函数

使用C/C++语言做对比

永远是类或结构体的成员

当函数以类或结构体的成员出现的时候就变成了方法,方法不能独立于类之外。

C++中是可以的,称为全局函数

是类或结构体最基本的成员之一

最基本的成员只有两个------字段与方法(成员变量与成员函数),本质还是数据+算法

方法表示类或结构体能做什么事情

为什么需要方法和函数

目的1:隐藏复杂的逻辑(封装)

目的2:复用(reuse,重用)

方法的声明与调用

声明方法的语法详解

声明/定义不分家

Parameter全程"formal parameter"(形式参数)

Parameter是一种变量

为方的命名规范 大小写规范

需要以动词或者动词短语作为名字

调用方法

Argument中午C#文档的官方译法为"实际参数",简称"实参",可理解为调用方法时的真实条件

调用方法时的argument列表要与定义方法时的parameter列表相匹配

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

构造器

构造器是类型的成员之一

狭义的构造器指的是"实例构造器"

构造器没有返回值 ,可以自定义 构造器的初始值,也可以强制 每次构造器都需要初始化值

cs 复制代码
namespace text
{
    class Program
    {
        static void Main(string[] args)
        {
            Student stu1 = new Student();//默认参数
            Console.WriteLine(stu1.Name);
            Console.WriteLine(stu1.Id);
            Console.WriteLine("=================");
            Student stu2 = new Student(001,"nb");//自定义参数
            Console.WriteLine(stu2.Name);
            Console.WriteLine(stu2.Id);
        }
    }

    class Student
    {
        public Student(int InitId,string InitName)//强制必须初始化构造器
        {
            this.Id = InitId;
            this.Name = InitName;
        }
        public Student()//自定义构造器
        {
            this.Id = 1;
            this.Name = "No Name";
        }
        public string Name;
        public int Id;
    }
}

构造器的内存原理 构造器在栈中创建,一共占4字节内存,其中储存的是new出来的对象(实例)的地址,new出来的对象(实例)的地址在堆中,其中存储的是具体的参数。

在自定义构造函数(即带参数的构造器)中,可能存在两次内存转储,如自定义string类型,其在堆内存储的是string实例化的对象的地址,又重新在堆中创建空间去存储真正的string实例化的对象数据。

方法的重载

声明带有重载的方法

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

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

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

如何对方法进行debug

设置断点、观察方法调用时的call stack、Step-in,Step-over,Step-out

方法的调用与栈

方法调用时栈内存的分配

相关推荐
爱和冰阔落3 分钟前
【C++多态】虚函数/虚表机制与协变 、override和final关键字全解析
开发语言·c++·面试·腾讯云ai代码助手
码住懒羊羊6 分钟前
【C++】stack|queue|deque
java·开发语言·c++
一只专注api接口开发的技术猿15 分钟前
容器化与调度:使用 Docker 与 K8s 管理分布式淘宝商品数据采集任务
开发语言·前端·数据库
一匹电信狗1 小时前
【LeetCode_160】相交链表
c语言·开发语言·数据结构·c++·算法·leetcode·stl
曦樂~1 小时前
【Qt】信号与槽(Signal and Slot)- 简易计算器
开发语言·数据库·qt
歪歪1001 小时前
React Native开发Android&IOS流程完整指南
android·开发语言·前端·react native·ios·前端框架
yaoxin5211231 小时前
212. Java 函数式编程风格 - Java 编程风格转换:命令式 vs 函数式(以循环为例)
java·开发语言
wangqiaowq1 小时前
ImmutableList.of() 是 Google Guava 库 提供的一个静态工厂方法,用于创建一个不可变的(immutable)列表。
开发语言·windows·python
十五年专注C++开发2 小时前
QDarkStyleSheet: 一个Qt应用的暗色主题解决方案
开发语言·c++·qt·qss
麦麦鸡腿堡2 小时前
Java的代码块介绍与快速入门
java·开发语言