我没正经学过 C# ,我只是知道C++中传递的是copy传递,就是void function(object c),那么如果按照function(d)去调用的时候,会发生object c = d的浅拷贝,也就是对象数据成员的复制。但不发生资源拷贝。我之所以怀疑C#是copy传递,是因为vb中有 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 便是按值传递的,所以我怀疑C#也是按值传递的。
同时如果变成ByRef,就是发生下面的编译错误,所以按照这个事情驱动的原形,我怀疑C#也根本是按值传递,也就是进行对象的复制。编译器错误信息: BC31029: 方法“Protected Sub Page_Load(ByRef sender As Object, e As System.EventArgs)”无法处理事件“Public Event Load(sender As Object, e As System.EventArgs)”,因为它们不具有相同的签名。
你以为还是c++啊
同时也增加了低效代码出现的可能.
你找找值传递和引用传递的资料
从 object sender 的声明上看, 明明是声明了一个object的变量,怎么会是地址呢?
那我声明一个void function(object c)的函数, 传递的都是指针?那什么时候才是传值呢?
传值是int,float这些基础类型,还有struct
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
便是按值传递的,所以我怀疑C#也是按值传递的。
系统事件驱动,.net就是传递指针。你再 byref 当然出错。这个出错不能推导出按值传递吧。