C# 如何实现接口

C# 如何实现接口,c#,wpf,interface,C#,Wpf,Interface,我想改变我的代码,我也想使用接口,这样如果有人想要一个未来,那么它可以很容易地实现,而不需要改变太多的代码 因此,我成功地实现了我的接口IPalindromeChecker。但问题现在出现在主窗口中。所以我不确定,但我会用public void Outputstring text方法创建另一个接口。我尝试在IPalindromeChecker public void Outputstring文本中添加一个方法,但没有成功 interface ICheckPalindrome {

我想改变我的代码,我也想使用接口,这样如果有人想要一个未来,那么它可以很容易地实现,而不需要改变太多的代码

因此,我成功地实现了我的接口IPalindromeChecker。但问题现在出现在主窗口中。所以我不确定,但我会用public void Outputstring text方法创建另一个接口。我尝试在IPalindromeChecker public void Outputstring文本中添加一个方法,但没有成功

 interface ICheckPalindrome
    {
        bool IsPalindrome(string text);
    }
现在还不清楚TextChecker.PalindromeChecker是什么,但如果您希望能够在不修改主窗口的情况下切换ICheckPalindrome接口的实现,则应在运行时向该窗口注入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属性设置为实现相同ICheckPalindrome接口的另一个类的实例。

什么是TextChecker.PalindromeChecker?如何在主窗口中使用界面?@đěxěŕ:如果您希望能够在不修改主窗口的情况下轻松切换IsPalindrome的实现,那么它不应该是静态的。这首先会破坏使用接口的目的。因为它实现了ICheckAlindrome接口,所以它不能是静态的。TBH,请参见问题和答案…嗨,回文检查器是一种方法,我在其中检查单词是否为回文,我使用TextChecker.PalindromeChecker调用该方法。我无法设置实例public ICheckPalindrome回文检查器{get;set;}//我不明白。为什么你不能定义一个属性?
  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--;
            }
        }
    }
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();
        }
    }
}