C#创建方法、使用方法、使用表达式主体方法、从方法返回多个值、作用域、重载方法、重构代码、可选参数和具名参数

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_44800780/article/details/102666421

方法是具名的语句序列,如果学过其他编程语言,比如c,c++,可以将方法视为与函数相似的东西.

声明方法

声明c#方法的语法如下:

returnType methodName(ParameterList)
{
	//主体语句
}

returnType是类型名称,指定方法返回的数据类型,比如int,string.如果没有返回值,要使用void.

methodName是调用方法时所用的名称,这个名称同样要遵循标识符命名规则.
方法名最好使用骆驼命名法,比如displayCustomer
parameterList(参数列表),可选,描述了允许传给方法的数据的类型和名称。在圆括号内填写参数列表时,先写类型名,再写参数名。


使用方法

下面是一个使用方法的例子

在这里插入图片描述
注意,必须显示指定方法的参数类型和返回类型.
注意,如果方法不是静态的,必须生成实例后才能调用。
在这里插入图片描述
如果你学过C或者C++等语言,可能会疑惑为什么不能调用,
因为c#不支持全局方法,所有方法必须在类的内部,如果不是静态的话,则必须生成类的实例后,才能调用类的方法
在这里插入图片描述
有两种方法:
第一 生成类的实例,在这个例子中就是Program类,然后调用。
第二让方法变成静态,直接调用.


使用表达式主体方法

有的方法十分简单,就是执行单一任务或返回计算结果,这种情况下可以简写,使用=>操作符引用构成方法主题的表达式,
比如:
在这里插入图片描述
没有return语句。
表达式的值自动作为返回值,如果表达式不返回值,则为void方法
类似这样的设计称为语法糖,代码更易读,程序更清晰。


从方法返回多个值

有时候想从方法返回多个值,比如整数除法,可以一次性返回商和余。
这可通过返回元组(tuple)实现。元组就是一个小的值的集合。
使用方法如下:
在这里插入图片描述


使用作用域

创建变量的目的是容纳值,变量有效期始于定义位置,终于方法结束时。方法执行完毕,变量随之消失。

某变量能在程序特定位置使用,就说该变量在那个位置“处于作用域内”.

总而言之,变量作用域是指该变量能起作用的程序区域。

定义局部作用域

{}大括号定义了方法作用域。
在这里插入图片描述
方法主体声明的任何变量都具有那个方法的作用域;方法结束,它们随之消失。这种只能由方法内部的代码访问的变量叫做局部变量,不能利用局部变量在不同方法之间共享消息。

定义类作用域

在类声明的任何变量都具有那个类的作用域,类定义的变量称为字段。比如:
在这里插入图片描述
可以看到没有任何的报错。变量myfield在类内部定义,可由类的所有方法使用.

重载方法

在这里插入图片描述
以Console类的WriteLine方法为例,在这里插入图片描述
重载是一项十分有用的技术,可以针对不同数据类型或不同信息组别执行相同的操作。编译器根据实参数量和类型来选择匹配的重载版本,注意,不能声明仅仅返回类型不同的两个方法。


重构代码

有时要在应用程序的多个位置写相同或者类似的代码,这时可选定并右击输入的代码块,从弹出菜单中选择“快速操作和重构”,在单击”提取方法“。所选的代码会移动到一个名为NewMethod的新方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


使用可选参数和具名参数

定义可选参数

指定可选参数是在定义方法时使用赋值操作符为该参数提供默认值。
比如:

void oneMethod(int first, double second = 0.0,string third = "Hello")

可选参数只能放在必需参数之后,一般地,函数的形参入栈是由左至右入栈,排第一的形参被第一个压入栈里,成为栈底元素,关键点就这里,因为形参的第一个参数必须是确定的,由此,编译器系统才可以对函数开辟一个保存形参的栈区,然后第一个之后的元素陆续入栈。如果是把可选的参数排在前面,由于它是不确定的,编译系统无法预知何时才会需要对函数开辟一个保存形参的栈区。因此必须放在最后。
调用如下:

optMethod(99, 123.45, "World");
optMethod(100, 54.321);

传递具名参数

c#默认根据每个实参在方法调用中的位置判断对应的形参,
比如

optMethod(99, 123.45, "World");

99对应了first,123.45对应了second,"World"对应了third.
c#还允许按名称指定参数。
比如

optMethod(first : 99, second: 123.45, third: "World");
optMethod(third: "World",second : 123.45,first : 99);

具名参数允许实参按任意顺序传递。
还允许省略实参

optMethod(first : 99, third: "World");

消除可选参数和具名参数的歧义

在这里插入图片描述
上面调用哪个a方法呢?
在这里插入图片描述
答案是调用最匹配的.最后选择3个参数的版本,而不是四个参数的.
在这里插入图片描述
如果类似这种,会造成二义性,不允许编译。

猜你喜欢

转载自blog.csdn.net/qq_44800780/article/details/102666421