C#的引用参数和值参数

 引用参数和值参数

在前面的函数学习中,所有函数的参数都是有值参数:在使用参数的时候把一个值传递给函数使用的一个变量.在函数中对此变量的任何修改都不会影响函数调用中指定的参数.还是举例说明比较好:

static void doDouble(double mynum)

{

mynum *= 2;

Console.WriteLine("mynum in 函数中doDouble{0}", mynum);

}

static void Main(string[] args)

{

Console.WriteLine("引用函数");

double mynum = 15;

Console.WriteLine("调用函数之前的mynum={0}",mynum);

doDouble(mynum);

Console.WriteLine("调用函数之后的mynum={0}",mynum);

结果输出如下图所示:

 

引用函数

引用函数之前的mynum*15

mynum in 函数中doDouble30

调用函数之后的mynum=15

 

在main()函数中的mynum=15;调用

doDouble(mynum);把mynum的值传递给static void doDouble(double mynum)函数中的局域变量mynum;但是局域变量mynum在此函数中的改变

没有影响main()函数中的mynum.

当然要改变mynum的值也比较简单.只要对函数做如下修改:

static double doDouble(double mynum)

{

mynum *= 2;

Console.WriteLine("mynum in 函数中doDouble{0}", mynum);

return mynum;

}

static void Main(string[] args)

{

Console.WriteLine("引用函数");

double mynum = 15;

Console.WriteLine("调用函数之前的mynum={0}",mynum);

mynum = doDouble(mynum);

Console.WriteLine("调用函数之后的mynum={0}",mynum);

输出结果是

 

引用函数

引用函数之前的mynum*15

mynum in 函数中doDouble30

调用函数之后的mynum=30

 

但是以上的方法在改变多个参数的时候就不行了,此时可以通过引用传递参数:函数处理的变量与函数调用中使用的变量相同,在C#中使用关键字:ref指定参数,在调用函数的时候用: doDouble(ref mynum); static void doDouble( ref double mynum),这样修改后的结果与上面的结果一样:

 

调用函数之前的mynum*15

mynum in 函数中doDouble30

调用函数之后的mynum=30

 

Main()函数

Main()函数是C#应用程序的入口点,执行这个函数就是执行应用程序,也就是说在执行过程开始时候,会从Main()函数开始,当Main()执行结束之后程序运行就结束了.在应用程序中Main()函数的形式是: static void Main(string[] args);Main()函数有形式: static void Main() ,static void Main(string[] args) ,static int Main(), static int Main(string[] args).Main()函数的参数args是从应用程序的外部接受信息的方法.

结构函数

所谓结构函数就是结构体中的函数:这中函数非常实用:

struct Cloth  //结构体名字

{

public int age;//衣服使用寿命

public string sex;//合适性别

public string style;//款式

public double price;//价格

public double count;//折扣

public double SellPrice()

{

return count * price;

}

}

Cloth mycloth;

mycloth.age = 2;

mycloth.count = 0.98;

mycloth.price = 1000;

mycloth.sex = "man";

mycloth.style = "长裤";

Console.WriteLine("结构体数据输出:");

Console.WriteLine("age={0},sex={1},style={2},

price={3},count={4}",

mycloth.age,mycloth.sex,mycloth.style,mycloth.price,mycloth.count);

double sellprice = mycloth.SellPrice();

Console.WriteLine("出售价格mycloth.SellPrice();{0}", sellprice);

输出结果是:

 

结构体数据输出:

age=2,sex=man,style=长裤,price=1000,count=0.98

出售价格mycloth,SellPrice();980

 

如果没有结构函数,那么在计算count * price的时候就得使用:

sellprice =mycloth.price*mycloth.count.当然可以根据需要和结构体的特点而定义结构函数.

委托

委托是一种可以把引用存储为函数的类型,只有在介绍到事件和事件处理的时候才解释的清楚.委托的声明非常类型函数,但是不带函数体,而且要使用delegate,委托的声明指定了一个函数签名,其中包含一个返回类型和参数列表.定义了委托后就可以声明该委托类型的变量,接着把这个变量初始化为与委托有相同签名的函数引用.之后就可以使用委托变量调用这个函数.先看个例题:

delegate double ProcessDelegate(double param1,double param2);

static double Mult(double param1,double param2)

{

return param1 * param2;

}

static double Divide(double param1,double param2)

{

return param1 / param2;

}

ProcessDelegate process;

double param1, param2;

param1 = 16;

param2 = 4;

process = new ProcessDelegate(Mult);

Console.WriteLine("ProcessDelegate(Mult);{0}",

process(param1,param2));

process = new ProcessDelegate(Divide);

Console.WriteLine("ProcessDelegate(Divide);{0}", process(param1, param2));

程序结果是:

 

ProcessDelegate(Mult);64

ProcessDelegate(Divide);4

Delegate关键字指定该定义是用于委托的,而不是用于函数的, 委托和事件这两个概念是完全配合的。委托仅仅是函数指针,那就是说,它能够引用函数,通过传递地址的机制完成。委托是一个类,当你对它实例化时,要提供一个引用函数,将其作为它构造函数的参数.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值