e.g。像(参考这个)不起作用的东西......例如这失败了:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CopyOfThis
{
class Program
{
static void Main(string[] args)
{
View objView = new View();
objView.Boo();
objView.ShowMsg("The objView.StrVal is " + objView.StrVal);
Console.Read();
}
} //eof Program
class View
{
private string strVal;
public string StrVal
{
get { return strVal; }
set { strVal = value; }
}
public void Boo()
{
Controller objController = new Controller(ref this);
}
public void ShowMsg ( string msg )
{
Console.WriteLine(msg);
}
} //eof class
class Controller
{
View View { get; set; }
public Controller(View objView)
{
this.View = objView;
this.LoadData();
}
public void LoadData()
{
this.View.StrVal = "newData";
this.View.ShowMsg("the loaded data is" + this.View.StrVal);
}
} //eof class
class Model
{
} //eof class
} //eof namespace
答案 0 :(得分:14)
this
已经是一个参考。代码如
DoSomethingWith(this);
将对当前对象的引用传递给方法DoSomethingWith
。
答案 1 :(得分:4)
编辑:鉴于您编辑的代码示例,您不需要传递ref this
,因为已接受的答案声明 - 这已经是参考。
您无法通过引用传递this
引用,因为它是常量;通过ref传递它将允许它被更改 - 就C#而言,这是无稽之谈。
你能得到的最接近的是:
var this2 = this;
foo(ref this2);
答案 2 :(得分:0)
请记住,传递为ref
的变量应该在之前初始化。
答案 3 :(得分:0)
如果你有这样的方法:
void Foo(ref Bar value) {
// bla bla
}
您可以通过创建像这样的临时变量
从Bar对象中调用它var temp = this;
foo.Foo(ref temp);