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

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

Я реализовал интерфейс, но он не работает в MainWindow, я не могу вызвать метод.

Итак, я попытался использовать PalindromeChecker в качестве реализации по умолчанию PalindromeChecker = new PalindromeChecker();, поэтому я могу вызвать метод, но он не сработал.

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)
        {
            ......
            //Code
            }
        }
    }
  namespace TextChecker
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    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 = PalindromeChecker.IsPalindrome(text);

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

            if (InputText.Text == string.Empty)
            {
                OutputText.Clear();
            }
        }
        private void ButtonClicked(object sender, RoutedEventArgs e)
        {
            SubWindow subWindow = new SubWindow();
            subWindow.Show();
        }
    }
}
 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--;
            }
        }
    }

Я действительно застрял здесь, я хотел бы заранее поблагодарить вас.

Ответы [ 3 ]

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

Насколько вы можете видеть, вы не хотите, чтобы интерфейсы , класс экземпляры проверяли палиндром (вы действительно хотите реализовать несколько алгоритмов на выбор?), но метод static:

    // Let's class be partial one: if you want to add a method it it
    // you don't have to modify this code but 
    // add a chunk public partial static class MyStringRoutine {...}
    public partial static class MyStringRoutine {
      public static bool IsPalindrome(string text) {
        //DONE: do not forget about special cases
        if (string.IsNullOrEmpty(text))
          return true;

        for (int i = 0; i < text.Length / 2; ++i)
          if (text[i] != text[text.Length - 1 - i])
            return false;

        return true;
      }
    }

Тогда вы можете использовать его:

    private void InputText_TextChanged(object sender, TextChangedEventArgs e) {
      if (string.IsNullOrEmpty(InputText.Text)) 
        OutputText.Clear();
      else {  
        string suffix = MyStringRoutine.IsPalindrome(InputText.Text) 
          ? "is a palindrome"
          : "is NOT a palindrome";

        OutputText.Text = $"{InputText.Text} {suffix}";  
      }
    }

Если вам нужно реализовать интерфейс ICheckPalindrome, и, таким образом,Для работы с экземпляром класса необходимо создать экземпляр :

  private void InputText_TextChanged(object sender, TextChangedEventArgs e) {
    if (string.IsNullOrEmpty(InputText.Text)) 
      OutputText.Clear();
    else {
      // You have to create the instance (checker)
      ICheckPalindrome checker = new PalindromeChecker(); 

      // IsPalindrome is the instance method; you can't call is as 
      // PalindromeChecker.IsPalindrome
      string suffix = checker.IsPalindrome(InputText.Text) 
        ? "is a palindrome"
        : "is NOT a palindrome";

      OutputText.Text = $"{InputText.Text} {suffix}";  
    }  
  } 
1 голос
/ 22 июля 2019

Это может помочь:

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

0 голосов
/ 08 июля 2019

Из кода, который вы разместили, может показаться, что интерфейс ICheckPalindrome менее доступен, чем PalindromeChecker. Не уверен, как и почему ваш компилятор допустит это, но вы должны попробовать изменить код на

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

Таким образом, интерфейс будет отражать его реализацию (или, скорее, наоборот).

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