@0nk0l0g

Как создать ссылку на строку внутри объекта класса, которая указывает на переменную вне объекта?

Добрый вечер.
Я пытаюсь хранить внутри объекта ссылку на переменную (Name) вне этого объекта, чтобы при изменении значения по ссылке внутри метода объекта, менялась и сама переменная Name.
Короче говоря, я ожидаю, что строка Console.WriteLine(Name); выведет то, что ввели в методе startExecution().
Подскажите, возможно ли вообще это реализовать?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        public class stateEnterWord
        {
            private string word;
            public void init(ref string input)
            {
                word = input;
            }
            public void startExecution()
            {
                word = Console.ReadLine();
            }
        }
        static void Main(string[] args)
        {
            stateEnterWord obj = new stateEnterWord();
            string Name = "";
            obj.init(ref Name);
            obj.startExecution();
            Console.WriteLine(Name);
        }
    }
}
  • Вопрос задан
  • 236 просмотров
Решения вопроса 1
arusef
@arusef
Novice .NET dev
Это невозможно в рамках C#, потому что тип string - неизменяемый тип. Каждая новая строка имеет свой собственный экземпляр string (такое же поведение имеют все ValueType).
Если хотите добиться иного поведения, нужно использовать System.Text.StringBuilder.
Например:
public class stateEnterWord
        {
            private StringBuilder word;
            public void init(StringBuilder input)
            {
                word = input;
            }
            public void startExecution()
            {
                word.Append(Console.ReadLine());
            }
        }
  static void Main(string[] args)
        {
            stateEnterWord obj = new stateEnterWord();
            StringBuilder Name = new StringBuilder();
            obj.init(Name);
            obj.startExecution();
            Console.WriteLine(Name.ToString());
        }

Однако, если честно, это нарушает принципы ООП.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
На сколько я понимаю, у вас в word будет копия Name на момент вызова init, а не ссылка.
У вас word объявлена как string, а не как ссылка на string.
Больше ничего не скажу, т.к. C# это не мое.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы