2010-01-12 10 views
6

ad es. qualcosa come (ref questo) che non funziona ... E.g. questo non funziona:come passare il riferimento dell'istanza corrente in 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

Potrebbe fornire ulteriori informazioni? Un esempio di ciò di cui hai bisogno nella tua applicazione potrebbe rendere più facile per qualcuno rispondervi. –

risposta

14

this è già un riferimento. Codice come

DoSomethingWith(this); 

è passare il riferimento all'oggetto corrente al metodo DoSomethingWith.

+0

I * penso * che l'OP potrebbe voler passare una copia del riferimento, da cui il bit "(ref this)" del quesiton. Potrebbe però essere sbagliato, in quanto non proprio chiaro. –

+0

Ovviamente, se il metodo si trova sullo stesso oggetto non è necessario passarlo comunque, basta usarlo nel metodo. –

+0

Jupp. Revisionerò di conseguenza quando OP ci fornirà ulteriori informazioni. –

0

Ricordare che la variabile passata come ref deve essere inizializzata in precedenza.

4

MODIFICA: Dato l'esempio di codice modificato, non è necessario passare ref this poiché come indica la risposta accettata, questo è già un riferimento.

non è possibile passare il riferimento a this in base al riferimento poiché è costante; passarlo per ref permetterebbe di modificarlo, il che non ha senso fino a C#.

Il più vicino si può ottenere è di fare:

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

Se si dispone di un metodo come questo:

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

si può chiamare da un oggetto bar con la creazione di una variabile temporanea come questo

var temp = this; 
foo.Foo(ref temp); 
Problemi correlati