image.png

传值参数

image.png
image.pngimage.png

引用类型存储的是一个地址 √ Object对象.GetHashCode()是惟一的。

image.pngimage.png
image.pngimage.png

引用参数

目的:在方法内修改该值(所以传进方法前需要提前赋值)
image.png

方法内参数指向地址 与 方法外变量指向地址一致。方法内改变时,方法内也随着改变。

image.pngimage.png

将引用的地址进行修改…

image.pngimage.png

①未修改地址,但属性值进行改变了。(一直在操作同一个对象) ②传值参数与引用参数对比:内存机理不同。 传值参数:outterStu变量和stu参数,两个指向内存地址不一样,但存储着相同的一个地址(即实例在堆内存当中的地址)。 引用参数:outterStu变量和stu参数,指向内存地址是同一个,存储着的对象就是堆内存当中的地址。

image.pngimage.png

输出参数

目的:为了该参数向外输出,原来赋的值就会被丢弃。(C#并不要求传入前明确赋值,方法体内需要明确赋值)
image.png
image.pngimage.png
image.png
image.pngimage.png

数组参数

image.png

发现:使用时需要先声明数组?

image.png

使用params关键字后,不需要提前声明了。(自动声明数组,把给出的值放进数组,再传进方法) 拓展:其实Console.WriteLine()方法就用了params关键字。

image.png
image.pngimage.png

具名参数

image.png

优点:①提高代码的可读性 ②参数位置不再受参数列表顺序约束 其实不是参数的某个种类,而是参数的使用方法 √

不具名调用:
image.png
具名调用:
image.pngimage.png

可选参数

image.png
image.png

拓展方法(this参数)

image.png

①当我们无法对一个类型的源码进行修改的时候,可以使用扩展方法,为这种目标数据类型追加方法。 ②LINQ 也是扩展方法的一大体现。

image.png
image.png无扩展方法
image.png有扩展方法
(12)传值|输出|引用|数组|具名|可选参数|扩展方法 - 图37

LINQ 实例

  1. class Program
  2. {
  3. static void Main(string[] args){
  4. var myList = new List<int>(){ 11, 12, 9, 14, 15 };
  5. //bool result = AllGreaterThanTen(myList);
  6. // 这里的 All 就是一个扩展方法
  7. bool result = myList.All(i => i > 10);
  8. Console.WriteLine(result);
  9. }
  10. static bool AllGreaterThanTen(List<int> intList)
  11. {
  12. foreach (var item in intList){
  13. if (item <= 10){
  14. return false;
  15. }
  16. }
  17. return true;
  18. }
  19. }

All 第一个参数带 this,确实是扩展方法。(需要引入System.Linq名称空间)
(12)传值|输出|引用|数组|具名|可选参数|扩展方法 - 图38

总结

image.png
各种参数的使用场景总结:

  • 传值参数:参数的默认传递方法
  • 输出参数:用于除返回值外还需要输出的场景
  • 引用参数:用于需要修改实际参数值的场景
  • 数组参数:用于简化方法的调用
  • 具名参数:提高可读性
  • 可选参数:参数拥有默认值
  • 扩展方法(this 参数):为目标数据类型“追加”方法