zoukankan      html  css  js  c++  java
  • CLR Via C# 阅读笔记参数

    .NET Framework读书笔记一 参数

    •  默认值、命名参数

    在平常工作中,设计方法的时,方法参数的设计是方法设计必须优先慎重考虑的,比如说参数的类型、个数、默认值、可选性等。设计一个好的方法不管对代码的可读性、可维护性、可扩展性都起着很大的作用。在C#中,参数的默认值设置如下所示:

     

    参数默认值设置方式如上图红色矩形标注所示。函数Main分别对函数ShowInfor进行四次调用。仔细观察对函数ShowInfor的调用可以发现一个特性如下所示:

    程序运行结果:

     

    从程序运行结果可以得出以下结论:

    1. 函数以命名参数传值的顺序可以不与函数定义的参数顺序不一样。
    2. 显示给参数传递的值必须在命名参数传值的左边。

    如果给ShowInfor函数添加一个参数ID,如下定义:

     

    由VS的错误提示可知:可选参数的定义顺序必须在必选参数的后面。

    u  Out与ref

    参数的传递方式有两种:传值、传引用,对于基本的数据类型,一般的是按值的方式进行传递,如果要按引用的方式进行传递,该如何做?这里就涉及到C#中的Out与Ref相关方面的知识。

    对于Out参数,传递的实参可以不初始化,但是在函数返回前,必须对该参数进行赋值,在函数内部该参数可写,如下所示:

     

    如果未对Out参数赋值,如下所示:

     

    对于Ref参数,传递的实参在传递给形参前必须对其初始化,在函数内部可读可写。

    public static void GetName(ref string name)
    {
    name = "SuperMan";
    }

    如果未对实参进行初始化,出现如下错误,提示:使用了未赋值的变量

    针对Out参数和Ref参数类型必须与传递的实参的类型一致,否则出现如下错误:

    u  传递可变数量参数 params

    通常,在工作中使用最多的还是参数数量固定的方法。其实,在C#中,可以传递任意数量的参数,这在设计方法前并不知道将来具体可能有多少个参数的情况下提供了良好的解决方案。主要依靠关键字params来解决。Params必须和array联合使用,否则如下所示:

     

    如果确定是该调用可变参数数量函数还是固定参数数量函数?C#编译器首先检查是否存在于调用函数完全匹配的方法原型,如果存在直接调用。如果不存在,在检查是否存在使用了ParamArray属性的方法,如果存在,则调用该方法。整个过程,如下所示:

     

    以上就是参数的相关笔记,很少写博客,如有不当之处,请指出,我好修正。谢谢

  • 相关阅读:
    Java Spring Boot VS .NetCore (十) Java Interceptor vs .NetCore Interceptor
    Java Spring Boot VS .NetCore (九) Spring Security vs .NetCore Security
    IdentityServer4 And AspNetCore.Identity Get AccessToken 问题
    Java Spring Boot VS .NetCore (八) Java 注解 vs .NetCore Attribute
    Java Spring Boot VS .NetCore (七) 配置文件
    Java Spring Boot VS .NetCore (六) UI thymeleaf vs cshtml
    Java Spring Boot VS .NetCore (五)MyBatis vs EFCore
    Java Spring Boot VS .NetCore (四)数据库操作 Spring Data JPA vs EFCore
    Java Spring Boot VS .NetCore (三)Ioc容器处理
    Java Spring Boot VS .NetCore (二)实现一个过滤器Filter
  • 原文地址:https://www.cnblogs.com/PerfectSoft/p/2351747.html
Copyright © 2011-2022 走看看