C#学习笔记(四)参数

(1)形参

    形参是声明在方法的参数列表中而不是方法体中的本地变量。

    1.形参需要类型和名称,并能被写入和读出。
    2.和方法中的其他本地变量不同,形参在方法体的外面定义并在方法开始之前初始化(out参数除外)。
    3.参数列表中可以有任意数目的形参声明,而且声明必须用逗号隔开。

 

(2)实参

    实参是用于初始化参数的表达式或变量。
    1.实参位于方法调用的参数列表中,而且可以是变量或者表达式。
    2.每个实参必须对应形参的类型相匹配,或者是编译器必须能够把实参的类型转换。

 

(3)值参数

    值参数是通过复制实参的值到形参的方式把数据传递到方法中。
    1.系统在栈中为形参分配空间,然后将参数的值复制到形参中。
    2.值参数包含了值类型变量的值和引用类型变量的对象引用。
    3.值类型的实参值不受方法行为的影响。
    4.引用类型的实参值被方法行为改变。

 

(4)引用参数
    1.必须在方法的声明和调用中都是用ref修饰符
    2.实参必须是变量,并且在用在实参前必须被赋值。
    3.形参的参数名是实参变量的别名,其指向相同内存位置。

 

(5)输出参数

    输出参数用于从方法体内把数据传出到调用代码。
    1.必须在声明和调用中都使用修饰符out。
    2.实参必须是变量。
    3.在方法内部,输出参数在被读取之前必须被赋值。
    4.在方法返回之前,方法内部的任何可能路径都必须为所有的输出参数进行赋值。

(6)参数数组

    参数数组允许零个或多个实参对应一个特殊的形参。

    1.参数列表中只能有一个参数数组,且它必须位于参数列表中最后一位。 

    2.在数据类型前使用params修饰符,在数据类型后放置一组空的方括号。

    3.参数数组有两种方法提供实参,一种是用逗号分隔相同数据类型元素的列表,一种是该数据类型元素的一维数组。

    4.当使用元素列表时,参数数组的实参可以使用变量或者表达式。

    5.参数数组声明时使用params修饰符,调用中不允许使用params修饰符。

    6.如果数组参数是值类型,那么值被复制,实参不受方法内部的影响。

    7.如果数组参数是引用类型,那么引用被复制,实参引用的对象可以受到方法内部的影响。

    8.当使用元素列表时,编译器会声明并初始化形参数组。

    9.当使用元素数组时,编译器会直接引用元素数组而不是声明新的形参数组

 

(7)命名参数

    命名参数可以显式指定参数的名字,就可以以任意顺序在方法调用中列出实参。
    1.形参的名字后面跟着冒号和实际的参数值或表达式。
    2.在调用的时候,可以既使用位置参数又使用命名参数,但是位置参数必须先列出。

namespace ConsoleApp1
{
    class Program
    {
        
        private static void Main()
        {
            AddClass addClass = new AddClass();
            int result = addClass.Add(y: 20, x: 10);
            Console.WriteLine(result);
        }
    }

    public class AddClass
    {
        public int Add(int x, int y)
        {
            return x + y;
        }
    }
}

(8)可选参数
    可选参数是我们在调用方法的时候包含参数,也可以省略参数。    
    1.可选参数在方法声明的时候为参数提供默认值。    
    2.可选参数只能是值参数类型。    
    3.所有必填参数必须在可选参数声明之前声明。如果params参数,必须在所有可选参数之后声明。    
    4.可选参数从可选参数列表的最后开始省略,一直省略到列表开头。
    5.可选参数设置默认值时一定要使用不变的值,否则,在更迭程序集时,可能会引起调用方产生错误。

 

namespace ConsoleApp1
{
    class Program
    {
        
        private static void Main()
        {
            AddClass addClass = new AddClass();
            int result = addClass.Add(x: 10);
            Console.WriteLine(result);
        }
    }

    public class AddClass
    {
        public int Add(int x, int y=30)
        {
            return x + y;
        }
    }
}

(9)栈帧
    在调用方法的时候,内存从栈的顶部开始分配空间,保存和方法关联的数据项。这块内存空间叫做方法的栈帧。
    1.栈帧保存方法返回地址,也就是在方法退出的时候继续执行的位置。
       栈帧包括为参数分配的内存以及和方法调用相关的其他管理数据项。
    2.在方法调用时,整个栈帧都会被压入栈
    3.在方法退出时,整个栈帧都会从栈中弹出,此时也叫做栈展开。

(10)方法签名
    方法的签名由以下信息组成
    1.方法的名称
    2.参数的数目
    3.参数的数据类型和顺序
    4.参数修饰符

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值