2016-05-10 5 views
0

нужно немного помочь здесь.Как вызвать метод изменения строки в C#?

Мне нужно знать, можно ли вызвать метод при каждом изменении строки.

Скажем, у меня есть строка

input = Console.ReadLine(); 

так, что пользователь может изменить значение входной строки. Как это сделать, чтобы каждый раз, когда строка ввода менялась, вызывается метод?

+0

ЗАКАНЧИВАТЬ [ события] (https://msdn.microsoft.com/en-gb/library/8627sbea (v = vs.71) .aspx) – Shaffanhoon

+5

Этого нельзя достичь из коробки, вам нужен пользовательский класс, который реализует конкретное поведение , Обратите внимание, что строки в C# никогда не меняются - они неизменяемы. Создаются новые строки, но существующие не могут измениться. –

+1

Почему бы просто не вызвать метод в строке после 'input = Console.ReadLine();'? Если 'input' - это нечто иное, чем локальная переменная, то это, вероятно, поможет показать код, который его объявит. – Ulric

ответ

1

Что вы можете сделать, это создать свойство типа string под названием Input. В инкубаторе этого свойства, если значение изменилось, вы называете метод:

private string _input; 
public string Input 
{ 
    get { return _input; } 
    set 
    { 
     if (_input != value) 
     { 
      _input = value; 
      CallMethod(); 
     } 
    } 
} 

private void CallMethod() 
{ 
    Console.Write("Input has changed"); 
} 

private void ReadFromConsole() 
{ 
    Input = Console.ReadLine(); 
} 

Другим варианта, немного похожи, но более гибким, будет использовать событие:

private event TextChangedHandler TextChanged; 
public delegate void TextChangedHandler(); 

private string _input; 
public string Input 
{ 
    get { return _input; } 
    set 
    { 
     if (_input != value) 
     { 
      _input = value; 
      TextChanged?.Invoke(); 
     } 
    } 
} 

private void CallMethod() 
{ 
    Console.Write("Input has changed"); 
} 

private void ReadFromConsole() 
{ 
    TextChanged += CallMethod; 

    Input = Console.ReadLine(); 
} 
Смежные вопросы