Как реализовать интерфейс - PullRequest
0 голосов
/ 05 июля 2019

Я хочу изменить свой код, а также я хочу использовать интерфейсы, чтобы, если кто-то хочет будущего, его можно было легко реализовать, не меняя слишком много кода.

Итак, я успешно реализовал свой интерфейс IPalindromeChecker. Но проблема сейчас в MainWindow. Так что я не уверен, но я бы сделал другой интерфейс и с public void Output(string text) методом . Я попытался добавить метод в IPalindromeChecker public void Output(string text), но он не работал.

 interface ICheckPalindrome
    {
        bool IsPalindrome(string text);
    }
public class PalindromeChecker : ICheckPalindrome
    {

        /// <summary>
        /// Method for checking if the word/text is a palindrome.
        /// </summary>
        public bool IsPalindrome(string text)
        {
            int min = 0;
            int max = text.Length - 1;

            while (true)
            {
                if (min > max)
                {
                    return true;
                }

                char a = text[min];
                char b = text[max];

                if (a != b)
                {
                    return false;
                }

                min++;
                max--;
            }
        }
    }
  public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            lblInput.Foreground = Brushes.ForestGreen;
            lblResult.Foreground = Brushes.ForestGreen;
            lblTitel.Foreground = Brushes.ForestGreen;

        }

        /// <summary>
        /// User input and checking the input if the word a palindrome is.
        /// </summary>
        private void InputText_TextChanged(object sender, TextChangedEventArgs e)
        {
            string text = InputText.Text;

            bool isPalindrome = TextChecker.PalindromeChecker(text); // HERE IS THE PROBLEM

            OutputText.Text = text + (isPalindrome ? " is a palindrome" : " is NOT a palindrome");

            if (InputText.Text == string.Empty)
            {
                OutputText.Clear();
            }
        }
 public class PalindromeChecker : ICheckPalindrome
    {

        /// <summary>
        /// Method for checking if the word/text is a palindrome.
        /// </summary>
        public bool IsPalindrome(string text)
        {
            int min = 0;
            int max = text.Length - 1;

            while (true)
            {
                if (min > max)
                {
                    return true;
                }

                char a = text[min];
                char b = text[max];

                if (a != b)
                {
                    return false;
                }

                min++;
                max--;
            }
        }
    }

1 Ответ

3 голосов
/ 05 июля 2019

Непонятно, что такое TextChecker.PalindromeChecker, но если вы хотите иметь возможность переключать реализации интерфейса ICheckPalindrome без необходимости изменения MainWindow, вы должны внедрить окно с реализацией ICheckPalindrome во время выполнения и написать свой код против интерфейса.

Например, вы можете использовать свойство для этого:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        lblInput.Foreground = Brushes.ForestGreen;
        lblResult.Foreground = Brushes.ForestGreen;
        lblTitel.Foreground = Brushes.ForestGreen;

        //use the PalindromeChecker as the default implementation
        PalindromeChecker = new PalindromeChecker();

    }

    public ICheckPalindrome PalindromeChecker { get; set; } //<--

    private void InputText_TextChanged(object sender, TextChangedEventArgs e)
    {
        string text = InputText.Text;

        bool isPalindrome = PalindromeChecker.IsPalindrome(text);

        OutputText.Text = text + (isPalindrome ? " is a palindrome" : " is NOT a palindrome");

        if (InputText.Text == string.Empty)
        {
            OutputText.Clear();
        }
    }
}

Переключиться на другую реализацию тогда просто, как просто установить свойство PalindromeChecker MainWindow для экземпляра другого класса, который реализует тот же интерфейс ICheckPalindrome.

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