C#拾遗(二、函数)

1. 参数数组。C#的特色,允许函数参数的最后指定一个参数数组,可以使用个数不定的参数调用,用params关键字定义

static double SumVals(params double[] vals)
 {
      double sum = 0;
      foreach (double i in vals)
      {
          sum += i;
       }
       return sum;
}
//调用
SumVals(1,2,3);

2. 值参数和引用参数。引用参数使用关键字ref指定。函数定义和函数调用时都要使用ref

static void ShowDouble(ref int val)
{
    val *= 2;
    Console.WriteLine("val doubled is {0}", val);
}//调用,src必须非const,src必须初始化赋值。int src = 1;ShowDouble(ref src);

3. 输出参数。使用方式和引用参数类似,使用out关键字,不同于ref, out参数可以是未赋值的变量,并且建议是,有值反而会被修改而没意义。

static double MaxVal(double[] vals, out int maxIndex)
{
    double MaxVal = vals[0];
    maxIndex = 0;
    for (int i = 1; i < vals.Length; i++)
    {
        if (MaxVal < vals[i])
        {
            MaxVal = vals[i];
            maxIndex = i;
        }
    }
    return MaxVal;
}
//使用
double[] dVals={1,2,3,4,5,10,73,100};
int dIndex;
Console.WriteLine("{0},{1}", MaxVal(dVals, out dIndex),dIndex); 

4. 函数的重载。函数的签名包括函数的名称及其参数,包括参数的类型和关键字(out/ref),不包括函数的返回类型。

5. 委托。一种把引用存储为函数的类型。委托的生命类似于函数,不带函数体,使用关键字delegate。委托的声明指定了一个返回类型和参数列表,委托大多用于事件处理。

delegate double ProcessDelegate(double v1, double v2);
static double Multiply(double v1, double v2)
{
     return v1 * v2;
}
static double Divide(double v1, double v2)
{
     return v1 / v2;
}
//使用
ProcessDelegate process;
process = new ProcessDelegate(Divide);//第一种用法
process = Multiply;//第二种用法
process(1, 2);
时间: 2024-10-27 10:51:37

C#拾遗(二、函数)的相关文章

Ado.Net基础拾遗二:插入,更新,删除数据

插入数据 1 public void InsertDataToSQL() 2 { 3 string conStr = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString; 4 SqlConnection conn = new SqlConnection(conStr); 5 conn.Open(); 6 7 SqlCommand cmd = new SqlCommand

C++拾遗--bind函数绑定

C++拾遗--bind函数绑定 前言 函数绑定bind函数用于把固定的参数与已知的函数进行绑定,形成新的函数,从而减少参数的个数,降低函数的调用难度.需要指出:bind就是函数适配器. bind函数 实例 #include <iostream> #include <functional> using namespace std; using namespace std::placeholders; int main() { auto fun = [](int *array, int

C++拾遗--虚函数原理

C++拾遗--虚函数原理 前言 C++的多态依赖虚函数来实现.若类存在虚函数,则每一个类的实例都维护了一个地址,这个地址指向虚函数表.虚函数表中存放的是类中所有虚函数的地址.下面我们找出虚函数表的地址,从而获得每个虚函数的地址,然后使用地址直接调用虚函数. 正文 1.空类的size #include <iostream> using namespace std; class MyClass { }; int main() { cout << "sizeof(MyClass

Lua进阶(二)——函数环境、包

函数环境 function foo() print(g or "No g defined!") end foo() setfenv(foo, { g = 100, print = print }) --设置foo的环境为表{ g=100, ...} foo() print(g or "No g defined!") --No g defined! --100 --No g defined! 定义:函数环境就是函数在执行时所见的全局变量的集合,以一个表来承载. 说明:

二 函数对象、函数嵌套

一 函数对象 一.函数是第一类对象,即函数可以当作数据传递 二.利用该特性,优雅的取代多分支的if 二 函数嵌套 一.函数的嵌套调用 二.函数的嵌套定义 一 函数对象 一.函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二.利用该特性,优雅的取代多分支的if 1 def foo(): 2 print('foo') 3 4 def bar(): 5 print('bar') 6 7 dic={ 8 'foo'

python学习笔记(二) - 函数

一. 调用函数 python内置了一些数据类型转换函数,比如int()函数可以把其他数据类型转换为整形 >>> int('123') 123 >>> int(12.34) 12 >>> float('12.34') 12.34 >>> str(1.23) '1.23' >>> unicode(100) u'100' >>> bool(1) True >>> bool('') Fal

Python学习笔记总结(二)函数和模块

一.函数 函数的作用:可以计算出一个返回值,最大化代码重用,最小化代码冗余,流程的分解. 1.函数相关的语句和表达式 语句        例子 Calls        myfunc(‘diege','eggs',meat=‘lit’) #使用函数 def,return,yield      def adder(a,b=1,*c):                        return a+b+c[0] global        changer():                 gl

【C++】模板简述(二):函数模板

我们上文讲了,模板的引入,我们发现在某种特殊的情况下,必须得通过模板才能完美的解决问题. 本文就来简述一下函数模板的基本使用. 一.函数模板格式 template<typename Param1, typename Param2,...,class Paramn> 返回值类型 函数名(参数列表){ ... } 二.函数模板的实例 //T表示类型,具体是什么不知道,实例化的时候才知道 //typename可以用class代替,但推荐使用typename //注意:typename不能用struc

php深入学习笔记二( 函数内置函数 )

1. call_?user_?func_?array 调用用户自定义函数,第一个参数是函数名, 第二个参数是函数的参数 必须是是一索引数组 function foobar($arg, $arg2) { echo __FUNCTION__, " got $arg and $arg2\n"; } class foo { function bar($arg, $arg2) { echo __METHOD__, " got $arg and $arg2\n"; } } //

函数二----函数的进阶

一.命名空间(有三种) 1.内置的命名空间   -----python解释器 就是python解释器一启动就可以使用的名字存储再内置的命名空间中 内置的名字在启动解释器的时候被加载进内存里. 2.全局命名空间    -----我们写的代码,但不是函数中的代码 是在程序从上到下被执行的过程中依次加载进内存的 放置了我们设置的所有变量名和函数名 3.局部命名空间   -----函数 就是函数内部定义的名字 当调用函数的时候,才会产生这个名称空间,随着函数执行的结束,这个命名空间就又消失了 三种命名空