函数----Beginning Visual C#

span.kw { color: #007020; font-weight: bold; }
code > span.dt { color: #902000; }
code > span.dv { color: #40a070; }
code > span.bn { color: #40a070; }
code > span.fl { color: #40a070; }
code > span.ch { color: #4070a0; }
code > span.st { color: #4070a0; }
code > span.co { color: #60a0b0; font-style: italic; }
code > span.ot { color: #007020; }
code > span.al { color: #ff0000; font-weight: bold; }
code > span.fu { color: #06287e; }
code > span.er { color: #ff0000; font-weight: bold; }

-->

更多相关文章,见本人的个人主页:zhongxiewei.com

当函数传递参数通过引用方式传递的时候,语法有所不同

// in cpp
void doubleVal(int &val) {
    // ...
}

int main() {
    int val = 20;
    doubleVal(val);
    cout << val << endl; // output: 40
}
// in c sharp
static void doubleVal(ref int val) // 使用ref进行标识
{
    val *= 2;
}

static void Main(string[] args)
{
    int val = 20;
    doubleVal(ref val);
    Console.WriteLine(val); // output: 40
}


out 关键字,在c++中没有相似的关键字或用法 out 关键字的使用方式和ref类似,但有两点不同,1)在使用ref参数的时候,传递没有赋值的参数是不合法的。无法通过编译。但是在使用out参数的时候是合法的。2)并且使用out参数的时候,该参数被当作没有赋值的,对该值的调用会发生编译错误。如下:

static void doubleVal(out int val)
{
    val *= 2;   // 想要使用val中的数值,
                // 但是val被认为是没有赋值的,因此出现编译错误
}

static void Main(string[] args)
{
    int val=3;
    doubleVal(out val);
    Console.WriteLine(val); // output: 40
}


对于不定量参数输入的关键字为:param,具体实现如下:

static int sum(param int[] num) // 这里需要注意的是,param参数必须在参数列表的最后的位置
{
    int sumVal = 0;
    foreach (int n in num)
    {
        sum += n;
    }
    return sum;
}


在c#中对变量作用域的检测更加的严格,比如类似下面的代码能够在c++中编译通过并成功运行,而在c#中则无法通过编译,由于在同一个作用域中调用了没有初始化的变量。

string text;
for (int i=0; i<1; i++)
{
    text = "hello";
}
Console.WriteLine(text); // in cpp: cout << text << endl;


函数重载和c++中的类似,但是由于c#中对于“引用”,引入了ref关键字,因此,对于引用参数和非引用的参数的函数在c#中也能够重载,这在c++中是不合理的。如:

// in c#
static void showDouble(ref int val) {}
static void showDouble(int val) {}

// in cpp is error
void showDouble(int &val) {}
void showDouble(int val) {}


在c#中关于函数,还有delegate关键字,该关键字的含义用来创建一个能够用来表示其他函数的东东。这有点像c中的指针函数。如:

// in c#
delegate double processDelegate(double param1, double param2);
static double Multiply(double param1, double param2)
{
    return param1 * param2;
}

static double Divide(double param1, double param2)
{
    return param1 / param2;
}

static void Main(string[] args)
{
    processDelegate process;
    process = new processDelegate(Multiply);
    Console.WriteLine("{0}", process(3, 4));
    process = new processDelegate(Divide);
    Console.WriteLine("{0}", process(3, 4));
}
// in cpp
#include <iostream>

using namespace std;

int multi(int a, int b) {
    return a * b;
}

int add(int a, int b) {
    return a + b;
}
int main() {
    int (*fn)(int,int);

    fn = multi;
    cout << "multi " << fn(2,3) << endl;
    fn = add;
    cout << "add " << add(2,3) << endl;
}
时间: 2024-08-01 04:39:47

函数----Beginning Visual C#的相关文章

与类相关基本概念----Beginning Visual C#

span.kw { color: #007020; font-weight: bold; } code > span.dt { color: #902000; } code > span.dv { color: #40a070; } code > span.bn { color: #40a070; } code > span.fl { color: #40a070; } code > span.ch { color: #4070a0; } code > span.st

基本概念----Beginning Visual C#

更多相关文章,见本人的个人主页:zhongxiewei.com 变量 注释方式:// 注释在这里和/* 注释在这里 */ 整形变量的类型: Type Alias for Allowed Values sbyte System.SByte Integer between -2^7 and 2^7-1 byte System.Byte Integer between 0 and 2^8-1 short System.Int16 Integer between -2^15 and 2^15-1 ush

Visual Basic快捷教程——函数与子程序

函数是结构化程序设计的基础.可以拿现实生活中的"社会分工"这个概念来做类比.假设做包子只需要用到两种原料:一是用来做包子皮的面粉,另外就是用来做包子馅料的猪肉.作为一名专门做包子的厨师,你当然不能自己生产面粉和猪肉,所以你通常会从磨坊直接购买面粉,从肉铺直接购买猪肉.在这两种原料都具备的时候,你的任务仅仅只是负责做包子.更进一步,你还可以假设磨坊只负责把麦子磨成面粉,而不负责种植麦子,种植麦子的工作则有农民专门负责.对于做包子的厨师来说,他把生产面粉和猪肉这两项工作承包给了磨坊和肉铺,

js中字符串函数indexOf与search的区别

IndexOf()方法是用来判断一个字符串是否存在于一个更长的字符串中.从长字符串左端到右端来搜索,如果存在该子字符串就返回它所处的位置(即索引).如果在被搜索的字符串没有找到要查找的字符串返回-1.注意,这里的位置应当填写索引值.所有的字符串索引都是从零开始,第一个字符的位置就是0,终点位置就是字符串的长度减去1. 该方法等价于C语言中的strstr函数及Visual Basic语言中的inStr函数.这个方法也有一个相应的函数,即lastIndexOf(),从长字符串的右端搜索. 那么问题来

Js中 字符串函数indexOf与search的区别

转载自 http://blog.sina.com.cn/s/blog_ae40e7350102wnrs.html IndexOf()方法是用来判断一个字符串是否存在于一个更长的字符串中.从长字符串左端到右端来搜索,如果存在该子字符串就返回它所处的位置(即索引).如果在被搜索的字符串没有找到要查找的字符串返回-1.注意,这里的位置应当填写索引值.所有的字符串索引都是从零开始,第一个字符的位置就是0,终点位置就是字符串的长度减去1. 该方法等价于C语言中的strstr函数及Visual Basic语

rdlc报表函数

字符串函数 使用串联运算符和      Visual Basic 常量可将多个字段组合在一起.以下表达式返回两个字段,它们分别位于同一文本框的不同行中: 复制代码 =Fields!FirstName.Value & vbCrLf & Fields!LastName.Value 使用 Format 函数可设置字符串中日期和数字的格式.下面的表达式以长日期格式显示 StartDate 和EndDate 参数的值: 复制代码 =Format(Parameters!StartDate.Value,

C语言: 从 CodeBlocks 到 Microsoft Visual Studio 2017

开学到现在寒假,学习了一个学期的C语言,同时也已然用了大半年的 CodeBlocks 来写 C/C++ 程序.CodeBlocks 是写 C/C++ 语言的程序最轻量的IDE(集成开发环境),在 C 语言IDE中名声也是不小的,整个体积包括编译器 GUN 才70-80MB.笔者软件专业教学所用的就是这个 CodeBlocks IDE,与之同样有着轻量能级.名气的 C/C++ 的IDE是 Dev C++ ,它为 CCF (China Computer Federation)中国计算机学会考试等级比

CSDN回帖得分大全(近两年)

CSDN回帖得分大全(近两年) √ vs2005调用dll的时候Initialize()函数返回错误[VC/MFC 基础类] √ 为什么我创建登陆框之后,然后获取登陆框的数据时候总是出现非法操作![VC/MFC 界面] √ CFileFind::FindFile   支持通配符么?[VC/MFC 基础类] √ vc++   浮动窗口联动的实现[VC/MFC 界面] √ VC   从数据库中读出数据流后怎么判断文件格式[VC/MFC 数据库] √ windows   7接硬體,不會自動刷新   請

【转载】软件开发启示录——迟到的领悟

作者: John Sonmez  来源: IDF实验室博客  发布时间: 2013-10-20 15:47 转自(http://blog.idf.cn/2013/09/4-things-i-wish-i-would-have-known-when-i-started-my-software-development-career/) 我的软件开发生涯开始于15年前. 但是直到最近的5年,我才真正开始看到自己在软件开发领域的巨大进步. 这里有一些感悟是我希望能够在我进入软件开发领域时所知道的事情,如