传值参数
引用类型存储的是一个地址 √ Object对象.GetHashCode()是惟一的。
引用参数
目的:在方法内修改该值(所以传进方法前需要提前赋值)
方法内参数指向地址 与 方法外变量指向地址一致。方法内改变时,方法内也随着改变。
将引用的地址进行修改…
①未修改地址,但属性值进行改变了。(一直在操作同一个对象) ②传值参数与引用参数对比:内存机理不同。 传值参数:outterStu变量和stu参数,两个指向内存地址不一样,但存储着相同的一个地址(即实例在堆内存当中的地址)。 引用参数:outterStu变量和stu参数,指向内存地址是同一个,存储着的对象就是堆内存当中的地址。
输出参数
目的:为了该参数向外输出,原来赋的值就会被丢弃。(C#并不要求传入前明确赋值,方法体内需要明确赋值)
数组参数
发现:使用时需要先声明数组?
使用params关键字后,不需要提前声明了。(自动声明数组,把给出的值放进数组,再传进方法) 拓展:其实Console.WriteLine()方法就用了params关键字。
具名参数
优点:①提高代码的可读性 ②参数位置不再受参数列表顺序约束 其实不是参数的某个种类,而是参数的使用方法 √
可选参数
拓展方法(this参数)
①当我们无法对一个类型的源码进行修改的时候,可以使用扩展方法,为这种目标数据类型追加方法。 ②LINQ 也是扩展方法的一大体现。
LINQ 实例
class Program
{
static void Main(string[] args){
var myList = new List<int>(){ 11, 12, 9, 14, 15 };
//bool result = AllGreaterThanTen(myList);
// 这里的 All 就是一个扩展方法
bool result = myList.All(i => i > 10);
Console.WriteLine(result);
}
static bool AllGreaterThanTen(List<int> intList)
{
foreach (var item in intList){
if (item <= 10){
return false;
}
}
return true;
}
}
All 第一个参数带 this,确实是扩展方法。(需要引入System.Linq名称空间)
总结
各种参数的使用场景总结:
- 传值参数:参数的默认传递方法
- 输出参数:用于除返回值外还需要输出的场景
- 引用参数:用于需要修改实际参数值的场景
- 数组参数:用于简化方法的调用
- 具名参数:提高可读性
- 可选参数:参数拥有默认值
- 扩展方法(this 参数):为目标数据类型“追加”方法