2010-01-12 10 views
6

, p. algo así como (ref. esto) que no funciona ... P. ej. esto falla:cómo pasar la referencia de la instancia actual en 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

¿Podría darnos un poco más de información? Un ejemplo de lo que necesita en su aplicación puede facilitar que alguien lo responda. –

Respuesta

14

this es ya una referencia. Código como

DoSomethingWith(this); 

está pasando la referencia al objeto actual con el método DoSomethingWith.

+0

Creo * que el OP podría querer pasar una copia de la referencia, de ahí el bit "(ref)" de la pregunta. Sin embargo, podría estar equivocado, ya que no es muy claro. –

+0

Y por supuesto, si el método está en el mismo objeto, no necesita pasarlo de todos modos, solo use esto en el método. –

+0

Jupp. Revisaré en consecuencia cuando OP nos proporcione más antecedentes. –

0

Recuerde que la variable pasada como ref debe inicializarse antes.

4

EDITAR: Dado el ejemplo de código editado, no necesita pasar ref this ya que como dice la respuesta aceptada, esto ya es una referencia.

no puede pasar la referencia this por referencia porque es constante; pasarlo por ref permitiría que se cambiara, lo cual es una tontería en lo que se refiere a C#.

Lo más cerca que se puede conseguir es hacer:

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

Si usted tiene un método como este:

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

se le puede llamar desde un objeto barra mediante la creación de una variable temporal como esto

var temp = this; 
foo.Foo(ref temp); 
Cuestiones relacionadas