如何使函数参数不可修改?
如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的值,但是在函数外部是可以更改的。 --------------------编程问答--------------------
函数都是自己写的,在函数中不对a做修改是最好的,或者可以注明 --------------------编程问答-------------------- 至少这不应该是一个用语言去解决的问题,
补充:.NET技术 , C#