2.4C#函数成员之方法(Method)

1.方法声明

返回类型 方法名称<类型参数>(值参数, 默认值参数 = 值, { ref | out | in }引用参数, params 参数数组) {
    //方法体
}

当方法主体是单个表达式时,可使用紧凑表达式(Expression-bodied)格式定义方法,如下例中所示:

public override string ToString() => "This is an object";

2.方法分类

名称修饰符访问
静态方法(static method)用 static 修饰类.静态方法()
实例方法(instance method)无 static 修饰对象.实例方法()

3.参数分类

名称修饰符
值参数
默认值参数
引用参数ref用 ref 修饰
输出参数out用 out 修饰
引用参数in用 in 修饰
参数数组用 params 修饰

3.1 值参数

如果值参数是值类型,使用方法对原始对象的更改对原始对象无影响。如果值参数是引用类型,影响将会反应到原始对象。

3.2 默认值参数

可以为形参赋予默认值,当无实参的时候,将调用这个形参的默认值传递。

3.3 ref引用参数

ref 指定此参数为引用传递,变量在传递之前需要先初始化,可以由调用方法读取或写入。

void Method(ref int refArgument)
{
    refArgument = refArgument + 44;
}

int number = 1;
Method(ref number);
Console.WriteLine(number);
// Output: 45

3.4 out输出参数

out 指定此参数为引用传递,变量在传递之前未初始化,必须由调用方法写入。

void OutArgExample(out int number)
{
    number = 44;
}

int initializeInMethod;
OutArgExample(out initializeInMethod);
Console.WriteLine(initializeInMethod);     
// Output: 44

3.5 in引用参数

in 指定此参数为引用传递, 变量在传递之前需要先初始化,可以由调用方法读取,但不可以写入。

void InArgExample(in int number)
{
    // 取消下行的注释,会遇到 error CS8331
    //number = 19;
}

int readonlyArgument = 44;
InArgExample(readonlyArgument);
Console.WriteLine(readonlyArgument);    
// Output: 44

3.6 params参数数组

params 参数数组允许向方法传递数量不定的实参。参数类型必须是一维数组。位置必须放在最后一个。

params 参数数组的行为 与 作为参数的常规数组类型 完全相同。区别在于,常规数组类型传递的是单个数组实参,而 params 参数数组除此之外,还可以传递 数量不定的实参,此时,会使用包含给定的实参自动创建数组实例。

System.Console 类的 Write 和 WriteLine 方法是参数数组用法的典型示例。

public class Console
{
    public static void Write(string fmt, params object[] args) { }
    public static void WriteLine(string fmt, params object[] args) { }
    // ...
}
//会使用字符串参数后的所有的数量不定的实参自动创建数组实例。
int x, y, z;
x = 3;
y = 4;
z = 5;
Console.WriteLine("x={0} y={1} z={2}", x, y, z);
//等同于编写以下代码:
//单个数组实参
int x = 3, y = 4, z = 5;

string s = "x={0} y={1} z={2}";
object[] args = new object[3];
args[0] = x;
args[1] = y;
args[2] = z;
Console.WriteLine(s, args);

4.参数传递方式

由于形参是实参的规范,所以实参的数量和类型需与形参一致。

参数的传递不仅支持按位置从左往右依次传递方式,同时也支持按命名参数传递方式。

//按命名参数传递
方法(参数名称1: 实参1, 参数名称2: 实参2)

5.虚方法、重写方法和抽象方法

方法修饰符声明和实现
虚方法virtual在基类中声明和实现的方法,其中 任何派生类 都可提供或不提供更具体的实现。
抽象方法abstract在基类中声明但未实现的方法,必须在所有非抽象派生类中 重写 实现。可以理解为没有实现的虚方法,仅可在抽象类中使用。
重写方法override在派生类中实现的方法,此方法将 重写 具有相同签名的虚方法或抽象方法。

6.重载(overload)

方法签名 包含方法修饰符、方法名称、类型参数数量及其(参数的修饰符、类型和数量),返回类型 不是方法签名的一部分。

7.泛型方法

类型参数跟在方法名称后面。

与类型不同的是,通常可以根据方法调用的实参推断出类型参数的类型,无需显式指定。

返回类型 方法名称<类型参数>(可选参数)

8.Lambda表达式(又称匿名函数 )

语句 lambda,语句块作为其主体:

(input-parameters) => { <sequence-of-statements> }

表达式 lambda,表达式作为其主体:

(input-parameters) => expression;

9.readonly修饰符

在 ref readonly 方法返回中,readonly 修饰符指示该方法返回一个引用,且不允许向该引用写入内容。

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/csharp/csharplang/7871.html

(0)
上一篇 2021年2月4日 02:55
下一篇 2021年2月5日 19:24

相关推荐

  • 2.7C#函数成员之事件(Event)

    事件委托签名 用于定义事件以及订阅或取消订阅事件的语法是对委托语法的扩展。 参数列表包含两种参数:发件人和事件参数。第一个参数 sender 的编译时类型为 System.Object,第二个参数通常是派生自 System.EventArgs 的类型。 事件声明 事件的声明方式与字段类似,区别是事件声明包括 event…

    C#语言教程 2021年2月7日
    01230
  • 2.2C#数据成员之常量(Constant)

    1.常量声明和初始化 const 字段只能在该字段的声明中初始化,不能用任何构造函数对其赋值。 2.常量分类 2.1成员常量 名称 修饰符 静态常量 用 static 修饰 实例常量 无 static 修饰 2.2局部常量 名称 修饰符 局部常量 无

    C#语言教程 2021年2月2日
    01070
  • 3.8C#引用类型之集合(Collection)

    与数组不同,集合的长度(元素的个数)可以动态改变,可以向集合添加、删除元素 。 System.Collections.Generic 类 当集合中的所有元素都具有相同的数据类型时,泛型集合会非常有用。 类 说明 Dictionary<TKey,TValue> 表示基于键进行组织的键/值对的集合。 List&…

    C#语言教程 2021年3月8日
    01140

发表评论

登录后才能评论