本帖最后由 zhehan54 于 2010-07-01 14:30:09 编辑

解决方案 »

  1.   

    你调用了ChangeText(comm);
    在方法里面已经改变了CommandText的值~
      

  2.   

    我的问题就是为什么在里面会被改变?
    ChangeStr 却没改变string 的传入值?
      

  3.   


    谢谢你
    我现在的疑问就是
    为什么string与OracleCommand 同为引用类型
    而string的值未变?
      

  4.   


    参考一下下面的文章,会对你有帮助http://www.cnblogs.com/tling091223/archive/2009/12/23/1630338.html
      

  5.   

    你可以试试这样理解,我当初就是这么理解的。比如有个2户人家住在一起,同用一个水池
    A家庭用水池洗脸,称水池叫洗脸盆
    B家庭用水池洗脚,称水池叫洗脚盆
    这个时候,B家庭洗完脚,把他家的洗脚盆弄脏了。
    你说A家庭的洗脸盆还干净嘛?这就是你的command的情况
    A家庭和B家庭相当于你的两个函数体。Main和ChangeText。
    洗脚盆和洗脸盆其实是2个变量(可能同名,但是由于家庭不同区别开来)。
    而这时候,虽然变量不同,可是变量实际指代的是同一个水池。
    所以在ChangeText家庭中com.CommandText被弄脏了。
    Main家庭中的comm能干净吗?
    洗脚池.水=脏的;//可以读作 洗脚池的水是脏的下面是msg的情况
    后来A家庭发现B家庭居然做这样龌龊的事,
    决定自己开个井,于是A家的洗脸盆变成了井
    你说这时候,B家庭的洗脚盆会变成井吗?
    洗脸盆=井;//读作洗脸盆是井不知道你理解了其中的道理没有。
      

  6.   


    麻烦各位高手,不要再误导新人了
    string没什么特殊的!
      

  7.   

    string的每次改变都会产生一个新的
      

  8.   

    因为引用类型参数按值传递不能改变引用实例但可以改变引用实例的成员...去看这个...【.NET版月经问题】之二【引用类型参数就是按引用传递吗?】
      

  9.   

    string特殊不特殊和这个问题无关...
      

  10.   

    private static void ChangeText(OracleCommand com)
    {
        com.CommandText = "CommandText 被我改变了,哈哈!";
    }这里单纯是com这个对象的CommandText属性的赋值,指向另一个对象。
      

  11.   

    OracleCommand com是引用类型,你当然可以改变这个com引用类型对象里面的东西。要全面考虑不能片面看。比如:一个杯子里面装有水,你把杯子里面的水加了盐,就变成有咸味的水了。此时,杯子里面的水被你改变了。那么,你就声称:我能把地球上所以的淡水都变成咸的。 这个结论显然不对。
      

  12.   

    Com是应用类型, com 里的东西是com 的成员变量, 
    所以当然会如楼主的结果一样。。