void Fun(A a)
{
a = new A();
}
这个是可以的~

解决方案 »

  1.   

    A是引用类型,所以不需要加ref。也没见过const A 这样的写法。
      

  2.   

    C#中void Fun(A a)
    {}就算传了A对象为参数,在方法中,对象A内部的属性是可以改变的,但引用对象本身无法改变。如果LS要完全不改变A对象的一切,可以在方法中只使用即可。如果LS要完全改变A对象可以加ref A a
      

  3.   

    ref....
    哎...---------------------
    LZ说的功能我不知道C#是否提供. 不过我有个变通的方法: 你把a克隆一份出来传递过去即可. 别人改也改的是克隆体,对你关心的a没有影响.
      

  4.   

    而且在语言的本质上我认为也不允许 定义非const成员 在之后修改为const属性.这在语言层上就不可能办到.可能C++实现诸如 Fun(const &A a) 的功能也是基于 对象拷贝传递,然后在语法上作了限制,如果你非要对a进行修改,那么编译器预判断会让你编译失败以此达到你的目的. 但实际上 那个[预判断]是强加的.
      

  5.   

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

  6.   

    void Fun(A a)
    {}
    不改变外部变量的值void Fun(ref A a)
    {}
    按引用传递,才改变外部变量这个方法还是不行的,由于本身a就是引用类型,所以在函数Fun(a){}中若修改了a的值,在函数外部也会更改的。如果采用克隆的办法,也可以达到目的,但是若要大量调用函数Fun,假设上几十万次或者百万次,若a数据结构较为复杂情况下,开销会很大。而且最主要目的是防止在函数Fun(){}中无意修改了a的值,但是在函数外部是可以更改的。