2010-01-12 25 views
6

örn. Böyle olmayan bir şey (ref it) ... E.g. Bu başarısız:Geçerli örneğin başvurusu nasıl yapılır: 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

Biraz daha bilgi verebilir misiniz? Uygulamanız için ihtiyacınız olan şeylerin bir örneği, birisinin buna cevap vermesini kolaylaştırabilir. –

cevap

14

this zaten referanstır.

DoSomethingWith(this); 

gibi kod yöntemi DoSomethingWith mevcut nesnesi için bir başvuru geçmektedir.

+0

I * düşünüyorum * OP referansın bir kopyasını iletmek isteyebilir, dolayısıyla "(ref this)" quesiton biti. Yine de net olmayabilir, yanlış olabilir. –

+0

Ve tabi ki, eğer yöntem aynı nesne üzerindeyse, yine de onu geçmenize gerek yoktur, sadece bunu yöntemde kullanın. –

+0

Jupp. OP bize daha fazla arka plan sağladığında, revize edeceğim. –

0

ref olarak iletilen değişkenin daha önce başlatılması gerektiğini unutmayın.

4

DÜZENLEME: Düzenlenmiş kod örneğiniz verildiğinde, kabul edilen yanıt durumlarından beri ref this'u geçmeniz gerekmez - bu zaten bir referanstır.

this referansını referans olarak geçemezsiniz çünkü sabittir; ref tarafından geçirilmesi, değiştirilmesine izin verir - C# ile ilgili olduğu kadar saçmadır.

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

böyle bir yöntemi varsa:

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

Böyle geçici bir değişken oluşturarak Bar nesneden diyebilirsiniz

alabileceğiniz en yakın yapmaktır

var temp = this; 
foo.Foo(ref temp); 
İlgili konular