C#也允许函数默认参数
2012-09-07 13:08
351 查看
作为一个从C++过来的开发者,对于C#不能使用默认参数感到很不爽,因为这样的话明明写一个函数就可以实现的功能非得分成多个重载(overload)函数去写。但今天看到一个代码,突然发现C#原来也可以用默认参数,用法跟C++非常类似。
太奇怪了,我明明记得不行的啊,要行的话我不早就这么用了?一开始我还以为是.net 4.0的新功能,但用VS2010编了一个.net Framework 2.0的程序测试,居然也没问题。于是让同事用VS2005试试看,发觉编译不过,原来不是.net的问题,而是编译器的问题,因为究竟调用什么函数,传什么参数,这其实都是在编译期决定的,考虑到自己最开始用C#的时候是用VS2008,到了VS2010之后就支持了(也可能是C#的新特性,OK,总之现在是可以的了)。
而且我发觉这个默认参数功能比C++的还强,例如:
这样的话相当于制订了c的值,而b的值使用默认,而在C++中,要指定c的值,恐怕也一定得指定b的值。
static void TestFun(int a = 10) { Console.Write(a.ToString()); } static void Main(string[] args) { TestFun(); }
太奇怪了,我明明记得不行的啊,要行的话我不早就这么用了?一开始我还以为是.net 4.0的新功能,但用VS2010编了一个.net Framework 2.0的程序测试,居然也没问题。于是让同事用VS2005试试看,发觉编译不过,原来不是.net的问题,而是编译器的问题,因为究竟调用什么函数,传什么参数,这其实都是在编译期决定的,考虑到自己最开始用C#的时候是用VS2008,到了VS2010之后就支持了(也可能是C#的新特性,OK,总之现在是可以的了)。
而且我发觉这个默认参数功能比C++的还强,例如:
static void TestFun(int a, int b = 10, int c=20) { Console.Write(a + " " + b + " " + c); } static void Main(string[] args) { TestFun(3, c:30); }
这样的话相当于制订了c的值,而b的值使用默认,而在C++中,要指定c的值,恐怕也一定得指定b的值。
相关文章推荐
- 为什么C#不支持函数默认参数呢
- C#.NET学习笔记---C#中方法参数的传递方式: 值类型(默认),ref类型,out类型和params类型
- C# Thread中函数如何设置参数
- C#语言函数参数的传递
- 每天学习一点C++之三——函数的默认参数
- C# 引用类型作为函数参数时一些需要注意的地方
- 函数:使用函数重载及默认参数实现程序
- 函数的默认参数的大坑,参数的可变参数
- c# 多线程 调用带参数函数
- C++里面的重写带有默认参数的虚函数的问题
- C# 引用类型作为函数参数时
- 【C/C++学院】0819-/类的成员函数与const-mutable /构造与析构/拷贝构造deletedefault以及深浅拷贝/静态成员函数成员变量类在内存的存储默认参数/友元类以及友元函数
- C#调用VC的DLL的接口函数参数类型转换一览表
- js中对函数设置默认参数值的3种方法
- delphi内嵌汇编函数参数默认保存位置
- 函数的默认参数重复定义问题
- 函数的非固定参数,默认参数,参数组
- C#调用VC的DLL的接口函数参数类型转换一览表
- 关于C#事件处理函数中的参数(object sender, EventArgs e)
- 如何编写常见语言带默认参数值的函数