как передать ссылку на текущий экземпляр в C # - PullRequest
6 голосов
/ 12 января 2010

например. что-то вроде (ссылка), которая не работает ... Например. это терпит неудачу:

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 голосов
/ 12 января 2010

this уже является ссылкой. Код как

DoSomethingWith(this);

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

4 голосов
/ 12 января 2010

РЕДАКТИРОВАТЬ: Учитывая ваш отредактированный пример кода, вам не нужно передавать ref this, так как, как говорится в принятом ответе - это уже ссылка.

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

Самое близкое, что вы можете сделать:

var this2 = this;
foo(ref this2);
0 голосов
/ 12 января 2010

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

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

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

var temp = this;
foo.Foo(ref temp);
0 голосов
/ 12 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...