• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

函数----BeginningVisualC#

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

// 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;
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#面试题发布时间:2022-07-10
下一篇:
C#动态表达式计算C#动态表达式计算代码的坏味道之三——译自《重构》 ...发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap