c#中的函数参数传递有没有类似c++限定const参数的功能?

infinity17 2011-02-22 02:43:50
请教一下,c++中能通过const修饰符来保证实参指向的对象不能更改:
例如:int binary_search(const List<Record> &the_list,const Key &target)

c#中有类似的功能吗,例如:int binary_search(List<Record> the_list,Key target)
如果确保对象the_list和target不会被修改?
...全文
1153 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yehong008 2011-02-22
  • 打赏
  • 举报
回复
找这个问题很久了??
infinity17 2011-02-22
  • 打赏
  • 举报
回复
搞不懂c#为什么不设计一个类似的功能,感觉这个还是挺实用的
nicholas235 2011-02-22
  • 打赏
  • 举报
回复
不能确保不被改变,要想别的办法,比如把不希望被修改的值设成readonly
C#默认是按值传递,如果传值类型的参数,进去不会改变
但传进去参数是引用类型(非string类型),传进去的是指针,在方法内可以操作对象,但不能改变对象的引用。
yalan 2011-02-22
  • 打赏
  • 举报
回复
那么声明为ReadOnly变量可以吗?

1)C#中,const可以修饰全局变量和局部变量,但readonly只能修饰全局变量
2)C#中,const修饰的全局变量或局部变量必须在声明的时候初始化,因为是静态,所以无法使用构造方法初始化,当需要调用const修饰的全局变量时,可以通过类直接调用,但const修饰的局部变量则无法通过类调用,并且作用范围只能为局部.
3)readonly修饰的全局变量可以在声明时初始化,也可以在构造方法中被初始化,如果readonly所修饰的全局变量在两个地方都初始化了, 那么最后这个全局变量的值是在构造方法中被初始化, readonly可以在全局变量和构造方法中同时初始化

infinity17 2011-02-22
  • 打赏
  • 举报
回复
汗,你们都没有理解我的意思啊!!!
在c++中:const List<Record> &the_list指的是不能修改the_list的数据成员,而不是指向。
换个例子吧,这样和c#比较相对更加贴切
在c++中:int binary_search(const List<Record> *the_list,const Key *target),可以保证指针指向的对象不能修改,只作为输入然后执行相关操作输出相应结果。c#由于垃圾回收的原因,语法更加简洁,*the_list就可以写成the_list,叫做引用,但如何保证引用指向的对象不被修改能,ref和out就是两个意思,和const不是一回事啊- -
TimZhuFaith 2011-02-22
  • 打赏
  • 举报
回复
引用类型的内容 默认情况下(不加ref,out)也会被修改。。

保存处理前的对象,然后重新赋值 ,这样也行。。。
yalan 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
看你怎么理解了,const List<Record> &the_list中不能修改是指不能改变the_list的指向,而不是不能改变其中添加的项

c#中应该默认是不能修改的,如果要修改,需要加 ref或out
[/Quote]

哇,你小手好快!我刚打完字你的帖子就顶上来了!郁闷
yalan 2011-02-22
  • 打赏
  • 举报
回复
NET Ref和Out关键字
对于值类型,如果不使用ref /out则传递的只是这些值的COPY

使用了Ref和Out的效果就几乎和C中使用了指针变量一样。(传递的就是原值),它能够让你直接对原数进行操作,而不是对那个原数的Copy进行操作

对于引用类型,如果不使用ref /out,因为传递的是引用类型的地址值,则将传递引用类型的地址值的一个COPY(--针对地址值的角度还是值类型传递),实际上就是新开一个不同的内存变量来存储这个地址值的拷贝而使用ref /out,传递的还是引用类型的地址值,但是传递的就不是一个新变量来存拷贝,而是就是传原来的那个应用类型的地址值
bdmh 2011-02-22
  • 打赏
  • 举报
回复
看你怎么理解了,const List<Record> &the_list中不能修改是指不能改变the_list的指向,而不是不能改变其中添加的项

c#中应该默认是不能修改的,如果要修改,需要加 ref或out

111,101

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧