将强制类型转换写成 CType(),运算符 & 变成 and,| 变成 or。类型调整为CLR类型。
对,我也是几乎不用的,有时候写小程序才会用,大程序基本不用,可以说用ref的地方,都可以用别的方法解决,不然后期维护会逼死人的,有个很好的例子就是C++转来的c#代码,这种代码要是有人叫我维护,我就想都不想了,马上辞职走人
还有,这帖子也不算差啊,怎么就沉了
没仔细看你的代码,大致花2秒钟扫了一眼,要知道string虽然是引用类型,但是其赋值跟几乎其它引用类型的变量的赋值都是不一样的,它是创建了一个新的对象,因此引用类型string的赋值是类似于值类型的。
另外“ref按引用传递”是个容易引起误会的说法。在.net中任何引用类型,传递的都是其引用。不论是by ref还是by val都是传递引用的!只不过,ref说明此引用可以被修改,而by val则直接把堆栈中弹出的新的值丢弃了。
“按引用传递、按值传递”这是从c++中继承的一种说法,其实它是严重误导的。
.net中对于引用类型都是传递其引用,因此.net中by val传递反而比by ref传递的效率高。这种与c++的完全反差的结论,正好可以帮我们记住.net跟传统c++书上的描述在原理上的区别。
.net中对于引用类型都是传递其引用,因此.net中by val传递反而比by ref传递的效率高。这种与c++的完全反差的结论,正好可以帮我们记住.net跟传统c++书上的描述在原理上的区别。
嘿嘿,大哥你说话总是留一口的,在刚开始学c#基础时,大家都应该学过string赋值是创建新对象的吧,它是一种比较特殊的引用类型。大家也知道ref说明此引用可以被修改,也就是说会用,但是,如果微软不用ref这个词修饰这种方法,而改用比如说fer修饰,那我也可以说fer修饰说明此引用可以被修改,对吧。你明白我的意思吗?
我记得今天早上讨论过string引用类型把引用存储在栈中,而其实际值则在托管堆中,传递的时候是传递栈中的值,也就是其引用;int值类型存储在栈中,传递时也是传递栈中的值,也就是其实际值;而ref int也是在栈中,其实际值也在栈中,传递的时候。。。
我没有留,是你不仔细。我说了,是从c++中继承来的,那是10年前,为的是让程序员别对.net太抵触。
对于初学者,会用所谓“传地址,传值”来附会这种效果。而实际上.net实现时根本都是传对象的引用对象本身的,既不是什么“内存地址”更不是传一个拷贝。
string跟其它引用类型一样,调用是压入堆栈的当然是它的引用。
ref跟压入堆栈没有关系,所以你并没有说出int与ref int的区别啊?!
ref跟压入堆栈没有关系,所以你并没有说出int与ref int的区别啊?!
单独的值类型(单独指的是不是其他类的成员变量,或者说是一个局部变量),其实例被分配在栈上.
非单独的值类型(作为其他类的成员变量),其实例和引用类型的实例一起被分配到托管堆上(如果实例大小大于85000字节,则被分配到LOH堆上).对于引用类型而言,引用本身是在栈上的,引用在栈上存放的值就是指向其实例对象在托管堆的内存地址.
一个引用类型的实例,可能会产生多个引用,所谓引用相同指的是他们指向的托管堆内存地址相同,对于每个引用在栈上分配的存放引用的地址而言,是独一无二的.
可能我在#9楼最后一句话“而by val则直接把堆栈中弹出的新的值丢弃了”会产生误会了。
不论by ref还是by val,传递的都是对象的引用,它是做为值来传递的。而当写ref的时候,就会把变量指向返回来的值——既新的引用对象上;而byval则直接丢弃pop出来的值。
其实.net中从来也没有什么传地址这一说,对于任何引用类型它都是传递其引用对象,不论写不写ref压入堆栈的内容都是一样的而根本做任何区别。
非单独的值类型(作为其他类的成员变量),其实例和引用类型的实例一起被分配到托管堆上(如果实例大小大于85000字节,则被分配到LOH堆上).对于引用类型而言,引用本身是在栈上的,引用在栈上存放的值就是指向其实例对象在托管堆的内存地址.
一个引用类型的实例,可能会产生多个引用,所谓引用相同指的是他们指向的托管堆内存地址相同,对于每个引用在栈上分配的存放引用的地址而言,是独一无二的.
可能我在#9楼最后一句话“而by val则直接把堆栈中弹出的新的值丢弃了”会产生误会了。
不论by ref还是by val,传递的都是对象的引用,它是做为值来传递的。而当写ref的时候,就会把变量指向返回来的值——既新的引用对象上;而byval则直接丢弃pop出来的值。
其实.net中从来也没有什么传地址这一说,对于任何引用类型它都是传递其引用对象,不论写不写ref压入堆栈的内容都是一样的而根本做任何区别。
c++是怎么处理“值”呢?它把对象的内存地址指引的内容整个复制一份即可。而.net根本不存在这个关于对象的“值”的概念,所以套用c++概念来说对象的传值就会理解错了。.net它总是把对象的引用压入堆栈,不管你写还是不写ref都一样。
来源:
篮球殿堂