不能通过引用传递这个,这是readonly

时间:2018-06-11 23:03:08

标签: c# reference this mutability

获取此错误消息非常令人困惑,因为this.property = value完全有效。很明显,这可以用来设置值。但是,当将此作为参考传递给函数时,它会出错,并说明上述内容。如何将这个传递给期望参考的函数?

1 个答案:

答案 0 :(得分:-2)

" this"关键字在用作参数时并不是非常直观。以下内容应该有助于澄清它。

public void myFunction(ref myClass input) {}

是一个期望引用myClass实例的函数,例如,如果您打算能够从myClass的实例可能是本地的某个地方调用此函数,则可以使用变量。很奇怪,但以下引发了错误

myFunction(ref this);

thismyClass的定义中没有意义。问题来自于this不是变量。相反,它必须由Object传递。 this是可变的,意味着接收它作为参数的函数可以改变它,this引用的对象也会改变,不像具有按值传递语义的类型(int,long,object,dynamic) )。

要解决此问题,请为myFunciton()创建一个期望myClass而不是ref myClass的重载

另外一个重要提示:尝试input = new myClass无效。它会使程序崩溃,所以永远不要将this传递给试图直接设置其输入值的函数。这是因为你无法分配引用,尽管它的属性是可访问的,因此可以使用它来设置。

this只读,this的属性不是。这是一个与众不同的不寻常的属性,我实际上认为如果它实际上是我可以故意使用的话会很有趣。