函数----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;
}
函数----Beginning Visual C#的更多相关文章
- Windows Programming ---- Beginning Visual C#
span.kw { color: #007020; font-weight: bold; } code > span.dt { color: #902000; } code > span. ...
- 【从业余项目中学习2】C# 实现调用Matlab函数(Visual Studio:2008, Matlab:R2009a)
最近正在给客户做的个人项目,要求实现C#与Matlab之间的调用,即C# winform界面收集用户输入的参数,将参数传递给Matlab的算法计算,Matlab函数返回的结果显示在winform界面上 ...
- C运行时库(C Run-time Library)详解(提供的另一个最重要的功能是为应用程序添加启动函数。Visual C++对控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)
一.什么是C运行时库 1)C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 2)C 语言是所谓的“ ...
- Events基本概念----Beginning Visual C#
span.kw { color: #007020; font-weight: bold; } code > span.dt { color: #902000; } code > span. ...
- 与类相关基本概念----Beginning Visual C#
span.kw { color: #007020; font-weight: bold; } code > span.dt { color: #902000; } code > span. ...
- gets_s()函数的参数太少,strcpy_s():形参和实参 2 的类型不同,等c函数在Visual Studio上出现的问题, get()函数和scanf()读取字符串的区别,栈的随机性
首先,这些C函数,在VS上要加_s后缀的原因是,这些函数存在字符串越界等问题,可以参考这篇文章,https://blog.csdn.net/silleyj/article/details/854540 ...
- 基本概念----Beginning Visual C#
更多相关文章,见本人的个人主页:zhongxiewei.com 变量 注释方式:// 注释在这里和/* 注释在这里 */ 整形变量的类型: Type Alias for Allowed Values ...
- 在 C++Builder 工程里调用 DLL 函数
调用 Visual C++ DLL 给 C++Builder 程序员提出了一些独特的挑战.在我们试图解决 Visual C++ 生成的 DLL 之前,回顾一下如何调用一个 C++Builder 创建的 ...
- Visual C#实现Windows信使服务
现在有很多网络管理软件都具备网络上信息实时传送的功能,虽然有些网络通讯软件功能比较强大,有的软件不仅可以传送文本信息,还可以传送二进制文件等.但 它们都有一个无法克服的缺点,那就是分发比较困难,信息传 ...
随机推荐
- Java程序开发.邱加永2.1节
by2016.9.8 2.7.1 一维数组 1. 声明 int[] m: char[] c: double[] d: 2. 创建 数组声明之后还不能使用,m = new int[10]: c = ...
- JQuery之$.ajaxPOST数据
function postSimpleData() { $.ajax({ type: "POST", url: "/Service/SimpleData", c ...
- 通过修改i8042prt端口驱动中类驱动Kbdclass的回调函数地址,达到过滤键盘操作的例子
同样也是寒江独钓的例子,但只给了思路,现贴出实现代码 原理是通过改变端口驱动中本该调用类驱动回调函数的地方下手 //替换分发函数 来实现过滤 #include <wdm.h> #inclu ...
- HTML的两三事
关于在页面布局上,我用了两种方式 用 来调整需要空格的地方, 用<pre></pre>直接在代码页面调整页面布局 但是用 来布局当我把网页 ...
- 禁用SQL Server Management Studio的IntelliSense
禁用SQL Server Management Studio的IntelliSense 本文版权归作者所有,未经作者同意不得转载.
- Box-sizing:小身材,大拳头!
国庆回来,很久没写博客了.一来是自己毫无时间,二是最近开发任务特别紧,三是节后综合症,脑子一片空白没有找到写作的原材料.今天,在加完班回来的22点,忙里偷闲,分享一下最近学到的一个小知识点如题.标题的 ...
- Windows环境安装Linux系统及JDK部署
前言 由于我的笔记本有点问题,所以这周系统包括所有硬盘全部重装了,原来的Linux虚拟机都没了,因此才有了这篇文章和各位朋友们分享. 由于Linux环境的优越性(开源.低成本.安全性好.网络功能强大) ...
- SpringMVC拦截器详解[附带源码分析]
目录 前言 重要接口及类介绍 源码分析 拦截器的配置 编写自定义的拦截器 总结 总结 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:h ...
- 用java开发微信公众号:测试公众号与本地测试环境搭建(一)
本文为原创,原始地址为:http://www.cnblogs.com/fengzheng/p/5023678.html 俗话说,工欲善其事,必先利其器.要做微信公众号开发,两样东西不可少,那就是要有一 ...
- 简单的JavaScript互斥锁
去年有几个项目需要使用JavaScript互斥锁,所以写了几个类似的,这是其中一个: //Published by Indream Luo //Contact: indreamluo@qq.com / ...