方法参数关键字
1.params关键字
表示可选参数,一个方法中只能定义一个,后跟一维数组
2.ref关键字、out参数修饰符、in参数修饰符
三者都表示引用传递参数,三者在方法签名层面互斥,且不能用于异步方法和迭代器方法。
out仅能修饰方法参数,代表输出变量,允许传入未初始化甚至未声明(C#7.0)的变量,在方法中必须进行赋值,变量生存周期拓展至方法的外部区域。
in仅能修饰方法参数,代表该变量为只读属性,不允许在方法中进行赋值。
ref不仅能修饰方法参数,还能修饰方法的返回类型(这种用法与out相比的区别在于,ref作用于值类型的返回类型时,方法会输出一个特有的ref sruct类型)
ref readonly 可以修饰方法参数和返回类型,代表变量为只读属性。
泛型关键字
泛型类型参数在默认情况下不支持协变和逆变
1.in泛型修饰符
表示该泛型类型参数T仅能作为输入变量使用,且其具有逆变(Contravariant)性质
简单来说,能用定义类型的子类进行输入。
2.out泛型修饰符
表示该泛型类型参数T仅能作为输出变量使用,且其具有协变(covariant)性质
简单来说,能输出为定义类型的基类。