当前位置:编程学习 > C#/ASP.NET >>

如何使函数参数不可修改?


class A
{public double x;}

有一函数:
void Fun(A a)
{}

在函数外部声明了对象A a=new A();可见a是可以修改值的,现在要求传入Fun函数中,在函数内部不允许修改,
以前在C++中可以这么用
Fun(const &A a),不记得是&A还是A&了,总之引用传递,而且在函数内部不可更改a。

在C#中,这个const还有一个readonly都不能用于这里的,在C#中如何解决呢?疑惑中...... --------------------编程问答-------------------- void Fun(A a)
{
a = new A();
}
这个是可以的~ --------------------编程问答-------------------- A是引用类型,所以不需要加ref。也没见过const A 这样的写法。 --------------------编程问答-------------------- C#中

void Fun(A a)
{}

就算传了A对象为参数,在方法中,对象A内部的属性是可以改变的,但引用对象本身无法改变。

如果LS要完全不改变A对象的一切,可以在方法中只使用即可。

如果LS要完全改变A对象可以加ref A a

--------------------编程问答-------------------- ref....
哎...

---------------------
LZ说的功能我不知道C#是否提供. 不过我有个变通的方法: 你把a克隆一份出来传递过去即可. 别人改也改的是克隆体,对你关心的a没有影响. --------------------编程问答-------------------- 而且在语言的本质上我认为也不允许 定义非const成员 在之后修改为const属性.这在语言层上就不可能办到.

可能C++实现诸如 Fun(const &A a) 的功能也是基于 对象拷贝传递,然后在语法上作了限制,如果你非要对a进行修改,那么编译器预判断会让你编译失败以此达到你的目的. 但实际上 那个[预判断]是强加的. --------------------编程问答-------------------- void Fun(A a)
{}
不改变外部变量的值

void Fun(ref A a)
{}
按引用传递,才改变外部变量 --------------------编程问答-------------------- 顶起来了   --------------------编程问答-------------------- void Fun(A a)
{}
不改变外部变量的值

void Fun(ref A a)
{}
按引用传递,才改变外部变量

这个方法还是不行的,由于本身a就是引用类型,所以在函数Fun(a){}中若修改了a的值,在函数外部也会更改的。

如果采用克隆的办法,也可以达到目的,但是若要大量调用函数Fun,假设上几十万次或者百万次,若a数据结构较为复杂情况下,开销会很大。

而且最主要目的是防止在函数Fun(){}中无意修改了a的值,但是在函数外部是可以更改的。 --------------------编程问答--------------------
引用 8 楼 zzqy10 的回复:
void Fun(A a)
{}
不改变外部变量的值

void Fun(ref A a)
{}
按引用传递,才改变外部变量

这个方法还是不行的,由于本身a就是引用类型,所以在函数Fun(a){}中若修改了a的值,在函数外部也会更改的。

如果采用克隆的办法,也可以达到目的,但是若要大量调用函数Fun,假设上几十万次或者百万次,若a数据结构较为复杂情况下,开销会很大。

……

函数都是自己写的,在函数中不对a做修改是最好的,或者可以注明 --------------------编程问答-------------------- 至少这不应该是一个用语言去解决的问题,
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,