在C#中,是否应当常常使用ref作为传参? 不去考虑这个参数是否会在目标函数发生改变。是否有节省开销之说?是【推荐】,还是【避免】? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。传递到 ref 参数的参数必须最先初始化。这与 out 不同,out 的参数在传递之前不需要显式初始化。(请参见 out。)尽管 ref 和 out 在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。这是MSDN上的解释。 节省开销意味着牺牲性能要在另一个方法内改变值类型参数的值,就要用到ref ref 一般针对的是值类型,object的子孙基本不考虑使用它比如,一个方法会返回几个指标值,因为是多个,如果不用集合类型的话,就只能用ref这种方式了public void Point(ref int x, ref int y, ref char z) {// do something} 我明白您的意思。我的问题是:不考虑参数的更改情况下,这个ref是推荐,还是避免? 避免根据实际需要去做!不是一定每个方法有参数都加个ref上去! LZ根本就没搞清楚Ref的意思。C#和C++不一样,除了struct对象外,默认传递的就是指针(或者说就是引用)。所以普通的对象你加ref的话相当于用了指针的指针,换句话说,你在函数内使用那个变量的时候要解引用两次,效率大打折扣。至于少见的struct对象,如果长度少于一个机器字长,比如int32或者float,short,byte,char等,用了ref也会浪费地解引用一次,效率依然要差。只有当我们用一个很大的很少见的struct对象的时候,ref才能因为传指针而减少拷贝而提高效率。 是滴!许多人用c的那点东西往.net上套,经常出现问题。 所谓byval,当传递参数是对象时,其实就是指针,所以ref反而浪费了资源。 哦,呵呵,我也习惯了“指针说“了。其实.net中的对象引用跟c中的指针也是完全不一样的东西。对象引用是相当复杂的对象,而不是一个简单的c指针。只是,我们有时可以用c指针打个比方罢了。 C# 多窗体调用控件 GetClassName获得控件类名,结果为空 请教禁止一切软件运行的方法(程序,编程。。) 关于DataGridView显示数据的换行问题 菜鸟小妹提问:Hashtable 取某个值的问题! 添加web引用问题 程序自启动后无法连接Access数据库 求助大湿 asp.ent mysql 中文关键字查询不到对应记录 - 不慎感激 如何在treeview中实现,单击子结点它就会跳转一面页,显示特定的信息呀??? ######客户端 与服务器端建一个socker 连接,通过xml 传送数据,但是 在查询条件能否用列的序号而不是名称 购物车啊购物车 repeater里面的
传递到 ref 参数的参数必须最先初始化。这与 out 不同,out 的参数在传递之前不需要显式初始化。(请参见 out。)
尽管 ref 和 out 在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。
这是MSDN上的解释。
要在另一个方法内改变值类型参数的值,就要用到ref
{
// do something
}
我的问题是:不考虑参数的更改情况下,这个ref是推荐,还是避免?
C#和C++不一样,除了struct对象外,默认传递的就是指针(或者说就是引用)。所以普通的对象你加ref的话相当于用了指针的指针,换句话说,你在函数内使用那个变量的时候要解引用两次,效率大打折扣。
至于少见的struct对象,如果长度少于一个机器字长,比如int32或者float,short,byte,char等,用了ref也会浪费地解引用一次,效率依然要差。
只有当我们用一个很大的很少见的struct对象的时候,ref才能因为传指针而减少拷贝而提高效率。
是滴!许多人用c的那点东西往.net上套,经常出现问题。