2010-01-12 4 views
6

, например. что-то вроде (ref this), который не работает ... например. это не удается:Как передать ссылку текущего экземпляра на C#

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 
+4

Не могли бы вы дать немного больше информации? Пример того, что вам нужно для приложения, может помочь кому-то ответить на него. –

ответ

14

this уже ссылка. Код, как

DoSomethingWith(this); 

проходит ссылку на текущий объект к методу DoSomethingWith.

+0

Я * думаю * OP может захотеть передать копию ссылки, следовательно, бит «(ref this)» quesiton. Может быть, неправильно, хотя и не совсем понятно. –

+0

И, конечно, если метод находится на том же объекте, вам все равно не нужно его передавать, просто используйте это в методе. –

+0

Jupp. Я буду пересматривать соответственно, когда OP предоставляет нам больше фона. –

0

Помните, что переменная, прошедшая как ref, должна быть инициализирована ранее.

4

EDIT: Учитывая ваш отредактированный пример кода, вам не нужно передавать ref this, поскольку, поскольку принятые условия ответа - это уже ссылка.

Вы не можете передать ссылку this по ссылке, поскольку она постоянна; прохождение его с помощью ref позволило бы его изменить - это глупость до C#.

Ближайший вы можете получить это сделать:

var this2 = this; 
foo(ref this2); 
0

Если у вас есть метод, как это:

void Foo(ref Bar value) { 
    // bla bla 
} 

Вы можете вызвать его из объекта Bar, создав временную переменную, как это

var temp = this; 
foo.Foo(ref temp); 
Смежные вопросы