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