C#学习(5)方法的定义,调用,调试

方法的由来

  • 方法(Method)的前身是C/C++语言的函数(Function)
    • 方法是面向对象范畴的概念,在非面向对象语言中仍然称为函数
    • 使用C/C++语言做对比
  • 永远都是类(或结构体)的成员
    • C#语言中函数不可能独立于类(或结构体)之外
    • 只有作为类(结构体)的成员时才被称为方法
    • C++中是可以的,称为“全局函数”
  • 是类(或结构体)最基本的成员之一
    • 最基本的成员只有两个——字段与方法(成员变量与成员方法),本质还是数据+算法
    • 方法表示类(或结构体)“能做什么事情”
  • 为什么需要方法和函数
    • 目的1:隐藏复杂的逻辑
    • 目的2:复用(reuse,重用)
    • 示例:计算圆面积,圆柱体积,圆锥体积
namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            Calculator c = new Calculator();
            Console.WriteLine(c.GetConeVolume(1, 2)); 
        }
    }

    class Calculator
    {
        public double GetCircleArea(double 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;
        }
    }
}

方法的声明与调用

  • 声明方法的语法详解
  • 参见C#语言文档(声明/定义不分家)
  • Parameter全称“formal parameter”
    形式上的参数,简称"形参"
  • Parameter是一种变量
  • 为方的命名规范
  • 大小写规范
  • 需要以动词或者动词短语作为名字
  • 重温静态(static)方法和实例方法
  • 调用方法
  • Argumet中文C#文档的官方译法为“实际参数”,简称“实参”,可理解为调用方法时的真实条件
  • 调用方法时的argument列表要与定义方法时的parameter列表相匹配
    • C#是强类型语言,argument是值,parameter是变量,值与变量一定要匹配,不然编译器会报错

构造器

  • 构造器(constructor)是类型的成员之一
  • 狭义的构造器指的是“实例构造器”(instance constructor)
namespace Consturctor
{
    class Program
    {
        static void Main(string[] args)
        {
            Student stu = new Student();//敲完()之后系统会默认创造一个构造器
            Console.WriteLine(stu.ID);
        }
    }

    class Student
    {
        public int ID;
        public string Name;
    }
}
namespace Consturctor
{
    class Program
    {
        static void Main(string[] args)
        {
            Student stu = new Student();
            Console.WriteLine(stu.ID);//打印结果为“1”,“No Name”
            Console.WriteLine(stu.Name);
        }
    }

    class Student
    {
        public Student()//自定义构造器
        {
            this.ID = 1;
            this.Name = "No Name";
        }
        public int ID;
        public string Name;
    }
}
namespace Consturctor
{
    class Program
    {
        static void Main(string[] args)
        {
            Student stu = new Student(1,"WangXO");//输入实参
            Console.WriteLine(stu.ID);//打印结果为“1”,“WangXO”
            Console.WriteLine(stu.Name);
        }
    }

    class Student
    {
        public Student(int InitID, string InitName)//自定义带参数构造器
        {
            this.ID = InitID;
            this.Name = InitName;
        }
        public int ID;
        public string Name;
    }
}
namespace Consturctor
{
    class Program
    {
        static void Main(string[] args)
        {
            Student stu = new Student(1,"WangXO");//输入实参
            Console.WriteLine(stu.ID);//打印结果为“1”,“WangXO”
            Console.WriteLine(stu.Name);

            Student stu2 = new Student();//调用默认参数构造器
            Console.WriteLine(stu2.ID);//打印结果为“0”,“NoName”
            Console.WriteLine(stu2.Name);
        }
    }

    class Student
    {
        public Student(int InitID, string InitName)//自定义带参数构造器
        {
            this.ID = InitID;
            this.Name = InitName;
        }

        public Student()//重新自定义一个新的默认构造器
        {
            this.ID = 0;
            this.Name = "No Name";
        }
        public int ID;
        public string Name;
    }
}
  • 如何调用构造器
  • 声明构造器(在类名下键入ctor 双击tab 可以生成一个默认构造器)
  • 构造器的类型原理

方法的重载

  • 调用重载方法的示例
  • 声明带有重载的方法
    • 方法签名(method signature)由方法的名称,类型形参的个数和它的每一个形参(按从左到右的顺序)的类型和种类(值,引用,或输出)组成。方法签名不包含返回类型。
    • 实例构造函数签名由它的每一个形参(按从左到右的顺序)的类型和种类(值,引用或输出)组成。
    • 重载决策(到底调用哪一个重载):用于在给定了参数列表和一组候选函数成员的情况下, 选择一个最佳函数成员来实施调用。
namespace OverLoad
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }

    class Student
    {
        public int Add(int a,int b)//定义多种重载类型的Add方法
        {
            return a + b;
        }

        public int Add(int a,int b,int c)
        {
            return a + b + c;
        }

        public double Add(double a,double b)
        {
            return a + b;
        }

        public int Add(ref int a,int b)
        {
            return a + b;
        }

        public int Add(out int a,out int b)
        {
            a = 100;
            b = 100;
            return a + b;
        }
    }
}

namespace OverLoad
{
    class Program
    {
        static void Main(string[] args)
        {
            Calculator c = new Calculator();
            double x = c.Add(100D, 200D);//重载的调用(重载决策)
            int y = c.Add(1, 2, 3);
        }
    }

    class Calculator
    {
        public int Add(int a,int b)//定义多种重载类型的Add方法
        {
            return a + b;
        }

        public int Add(int a,int b,int c)
        {
            return a + b + c;
        }

        public double Add(double a,double b)
        {
            return a + b;
        }
    }
}

如何对方法进行Debug

  • 设置断点(breakpoint)
  • 观察方法调用时的call stack;
  • Step-in,Step-over,Step-out
  • 观察局部变量的值与变化
    (具体Debug方法参考视频教程)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值