一、如何定义和使用不接受或返回任何数据的简单函数
1、static <returnType> <functionName>()
{
return <returnValue>;
}
2、参数数组,如果参数的个数不定,可以使用参数数组,放在参数列别最后,用params关键字定义它们。
static <returnType> <functionName>(<p1Type> <p1Name>,...,params <type>[] <name>)
{
return <returnValue>;
`}
二、如何在函数中传入传出数据
1、通过引用传递参数,通过ref关键字
static void ShowDouble(ref <valueType> <valueName>){}
在函数调用中(这是必须的,因为ref参数是函数签名的一部分)再次指定它。。
ShowDouble(ref myNumber);
因为通过引用传递参数可能会改变参数的值,因此必须在函数调用中使用“非常量”变量。传递用const修饰的变量是非法的,
其次,必须使用初始化的变量。
2、还可以使用out关键字,指定所给的参数是一个输出参数。使用方式与ref相同,即在函数执行完之后,该参数的值将返回给函数调用中使用的变量。但区别是:
(1)可以把未赋值的变量用做out参数
(2)另外,在函数使用out参数时,out参数必须看做是还未赋值
同样,在函数调用这种必须使用out关键字,就像ref关键字一样。
三、使用变量作用域
1、全局变量。在控制台应用程序中,必须使用static或const关键字,来定义全局变量,如果要修改全局变量的值,就需要使用static。
2、其他结构中变量的作用域。
四、如何结合使用Main()函数和命令行参数
※参见你P128
五、如何把函数提供为结构类型的成员
1、结构可以包含函数和数据
struct customerName{ public string firstName,lastName; public string Name() { return firstName + “ ” + lastName; } }--------static void Main(string[] args){ customeName myCustomer; myCustomer.firstName = "John"; myCustomer.lastName = " Franklin"; Console.WriteLine("myCustomer.Name()"); Console.ReadKey(); }
※问题:为什么,这里的函数没有static,而前面的有修饰符static?
六、如何使用函数重载
为什么到现在提到函数重载,脑袋中还是一片空白呢。
就是允许重名函数,函数的功能也相同,可以通过函数的签名来区分,也可以通过参数的个数来区分
七、如何使用委托
1、委托(delegate)是一种可以把引用存储为函数的类型。委托在事件和事件处理时有更重要的用途。
(张子阳的解释:委托是一个类,它定义了方法的类型,使得可以将方法当做另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,...,使得程序具有更好的可扩展性。)
2、委托的声明类似于函数,但是不带函数体,且要使用delegate关键字,委托的声明指明了了一个返回类型和一个参数列表。委托是方法的类型,就像string是字符串变量的类型。
定义了委托之后,就可以声明该委托类型的变量。接着把这个变量初始化为与委托有相同返回类型和参数列表的函数引用。之后,就可以使用委托变量调用这个函数,就像该变量是一个函数一样。
定义了引用函数的变量后,可以把委托变量作为参数传递给一个函数,该函数就可以使用委托调用它引用的任何函数。