参数数组

C#允许为函数指定一个(只能指定一个)特定的参数,这个参数必须是函数定义中的最后一个参数,称为参数数组。参数数组可以使用个数不定的参数调用函数,可以使用params关键字定义它们。

参数数组可以简化代码,因为不必从调用代码中传递数组,而是传递同类型的几个参数,这些参数放在可在函数中使用的一个数组中。

参数的数量不受限制,可以为0个。

引用参数

用作ref参数的变量有两个限制。首先,函数可能会改变引用参数的值,所以必须在函数调用中使用“非常量”变量。

其次,必须使用初始化过的变量。C#不允许假定ref参数在使用它的函数中初始化。

输出参数

除了按引用传递值之外,还可以使用out关键字,指定所给的参数是一个输出参数。out关键字的使用方式与ref关键字相同。实际上,它的执行方式与引用参数完全一样,因为在函数执行完毕后,该参数的值将返回给函数调用中使用的变量。但是,存在一些重要区别。

l  把未赋值的变量用作ref参数是非法的,但可以把未赋值的变量用作out参数。

l 在函数使用out参数时,out参数必须看做是还未赋值。

即调用代码可以把已赋值的变量用作out参数,存储在该变量中的值会再函数执行时丢失。

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication1
{
class Program
{
//parameter array - params
static int SumVals(params int[] vals)
{
int sum = ;
foreach (int val in vals)
{
sum += val;
}
return sum;
} //reference parameter - ref
static void ShowDouble(ref int val)
{
val *= ;
Console.WriteLine("val doubled = {0}",val);
} //out parameter - out
static int MaxValue(int[] intArray, out int maxIndex)
{
int maxVal = intArray[];
maxIndex = ;
for (int i = ; i < intArray.Length; i++)
{
if (intArray[i] > maxVal)
{
maxVal = intArray[i];
maxIndex = i;
}
}
return maxVal;
} static void Main(string[] args)
{
int sum = SumVals(, , , , );
Console.WriteLine("Summed Values = {0}",sum); int myNum = ;
Console.WriteLine("myNum = {0}",myNum);
ShowDouble(ref myNum);
Console.WriteLine("myNum = {0}", myNum); int[] myArray = { ,,,,,};
int maxIndex;
Console.WriteLine("The maximum value in myArray is {0}", MaxValue(myArray,out maxIndex));
Console.WriteLine("The first occurence of this value is at element {0}",maxIndex+); Console.ReadLine(); }
}
}

Main()函数

这个函数可以返回void或int,又一个可选参数string[] args。Main()函数可以使用如下4种版本:

static void Main()

static void Main(string[] args)

static int Main()

static int Main(string[] args)

上面的第三、四个版本返回一个int值,它们可以用于表示应用程序如何终止,通常用作一种错误提示(但这不是强制的),一般情况下,返回0反映了“正常”的终止(即应用程序执行完毕,并安全地终止)。

Main()的可选参数args是从应用程序的外部接受信息的方法,这些信息在运行期间指定,其形式是命令行参数。

指定Main()参数:

1)打开项目的属性页面(在Solution Explorer窗口中右击项目名称,选择Properties选项)。

2)选择Debug页面,在Command Line Arguments设置中天街所希望的命令行参数。

结构函数

结构可以包含函数和数据。

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication1
{
class Program
{
struct customername
{
public string firstName, lastName;
public string Name()
{
return firstName + " " + lastName;
}
} static void Main(string[] args)
{
customername myCustomer;
myCustomer.firstName = "Steven";
myCustomer.lastName = "Wang";
Console.WriteLine(myCustomer.Name()); Console.ReadLine(); }
}
}

委托(delegate)是一种可以把引用存储为函数的类型。委托的声明非常类似于函数,但不带函数体,且要使用delegate关键字。委托的声明制定了一个返回类型和一个参数列表。

在定义了委托后,就可以声明该委托类型的变量。接着把这个变量初始化为与委托有相同返回类型和参数列表的函数引用。之后,就可以使用委托变量调用这个函数,就像该变量是一个函数一样。

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication1
{
class Program
{
delegate double ProcessDelegate(double param1, double param2); static double Multiple(double param1, double param2)
{
return param1 * param2;
} static double Divide(double param1, double param2)
{
return param1 / param2;
} static void ExecuteFunction(ProcessDelegate process)
{
Console.WriteLine(process(, ));
} static void Main(string[] args)
{
ProcessDelegate process;
Console.WriteLine("Enter 2 numbers separated with a comma:");
string input = Console.ReadLine();
int commaPos = input.IndexOf(',');
double param1 = Convert.ToDouble(input.Substring(,commaPos));
double param2 = Convert.ToDouble(input.Substring(commaPos+,input.Length-commaPos-));
Console.WriteLine("Enter M to multiple or D to divide:");
input=Console.ReadLine();
if(input.ToUpper()=="M")
{
process=new ProcessDelegate(Multiple);
// process = Multiple; // or you can write this
}
else
{
process=new ProcessDelegate(Divide);
// process = Divide; // or you can write this
}
Console.WriteLine("Result: {0}",process(param1,param2)); ExecuteFunction(process); Console.ReadLine(); }
}
}

要把一个函数引用赋给委托变量,必须使用new关键字创建一个新委托。在这个关键字的后面,指定委托类型,提供一个引用所需函数的参数。参数是要使用的函数名,且不带括号。

C#代码示例_函数的更多相关文章

  1. C#代码示例_定义类

    默认情况下,类声明为内部的,即只有当前项目中的代码才能访问它.可以使用internal访问修饰符关键字显示指定. 除了两个访问修饰符关键字(public, internal)外,还可以指定类是抽象的( ...

  2. C#代码示例_调试

    调试信息 可使用如下两个命令输出调试信息: l Debug.WriteLine() l Trace.WriteLine() 这两个命令函数的用法几乎完全相同,但有一个重要区别.第一个命令仅在调试模式下 ...

  3. C#代码示例_集合

    C#中数组实现为System.Array类得实例,它们只是集合类(Collection Classes)中的一种类型. 索引符(indexer)是一种特殊类型的属性,可以把它添加到一个类中,以提供类似 ...

  4. C# 代码示例_结构/数组/枚举...

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. 转:HIBERNATE一些_方法_@注解_代码示例---写的非常好

    HIBERNATE一些_方法_@注解_代码示例操作数据库7步骤 : 1 创建一个SessionFactory对象 2 创建Session对象 3 开启事务Transaction : hibernate ...

  6. spark自定义函数之——UDF使用详解及代码示例

    前言 本文介绍如何在Spark Sql和DataFrame中使用UDF,如何利用UDF给一个表或者一个DataFrame根据需求添加几列,并给出了旧版(Spark1.x)和新版(Spark2.x)完整 ...

  7. Java8函数接口实现回调及Groovy闭包的代码示例

    本文适用于想要了解Java8 Function接口编程及闭包表达式的筒鞋. 概述 在实际开发中,常常遇到使用模板模式的场景: 主体流程是不变的,变的只是其中要调用的具体方法. 其特征是:   Begi ...

  8. Python基础篇(三)_函数及代码复用

    Python基础篇_函数及代码复用 函数的定义.使用: 函数的定义:通过保留字def实现. 定义形式:def <函数名>(<参数列表>): <函数体> return ...

  9. 2018-11-27 中文代码示例之Programming in Scala笔记第七八章

    续前文: 中文代码示例之Programming in Scala学习笔记第二三章 中文代码示例之Programming in Scala笔记第四五六章. 同样仅节选有意思的例程部分作演示之用. 源文档 ...

随机推荐

  1. 怎样在excel中添加下拉列表框

    用excel2013打开要编辑的工作表,例子是一个班级名单,可以看到政治面貌目前还没有填写   接着我们找一个空白处,依次写入政治面貌的可能选项: 群众.共青团员   然后选中“政治面貌”这一列,点击 ...

  2. java编写一个可以上、下、左、右移动的坦克

    唉,本人学习进度缓慢,但依然会坚持不懈!有感兴趣的朋友可以在下面留言. 源代码献上: /* * 画出我的坦克,使他可以上下左右移动 */package com.test4; import javax. ...

  3. java编写一个可以上下移动的小球:运行后,可以通过上下左右键进行移动

    /* * 功能:加深对事件处理机制的理解 * 1.通过控制上下左右键,来控制一个小球的位置 */package com.test1;import java.awt.*;import javax.swi ...

  4. 如何让一个DIV浮动在另一个DIV上面

      直接上DEMO了 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3 ...

  5. (原创)LAMP搭建之一:图解如何安装并检查LAMP

    LAMP搭建之一:图解如何安装并检查LAMP 第一步:安装Linux(RedHat5) 第二步:rpm -qa httpd(查看apache是否安装) rpm -qa php(查看php是否安装) r ...

  6. Java面向对象三大特点之多态

    概念: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示: 多态性是对象多种表现形式的体现,同一个事件发生在不同的对象上会产生不同的结果. ...

  7. D3.js 用层画条形图

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. Python之路 day2 初识字典

    #Author:ersa ''' key-value 键值对 字典是无序的,不需要下标,有key 字典的查找.修改.添加.判断.删除 ''' info = { 'stu1101': "Ten ...

  9. 7 -- Spring的基本用法 -- 7...

    7.7 创建Bean的3种方式 ① 调用构造器创建Bean. ② 调用静态工厂方法创建Bean. ③ 调用实例工厂方法创建Bean. 7.7.1 使用构造器创建Bean实例. 使用构造器来创建Bean ...

  10. unity htc vive使用

    本文介绍如何在Unity中使用HTC vive设备,当前VR作为市场比较火热的热点,HTC VIVE设备作为三大供应商之一,许多人购买了该设备,却不知道如何使用,本文通过图文并茂的形式,进行手把手的讲 ...