C#-如何使用具有一个属性的接口在类之间进行通信
本文关键字:之间 通信 接口 何使用 具有一 有一个 属性 C#- | 更新日期: 2023-09-27 18:23:42
假设我有一个接口和两个类:
public interface Imyinterface
{
string Text { get; set; }
}
public class Class1 : Imyinterface
{
public string Text { get; set; }
}
public class Class2 : Imyinterface
{
public string Text { get; set; }
}
"问题"在于这两个阶层之间的沟通。我的意思是-我想让Class2知道字符串"Text"在Class1中何时更改,以及它的值是多少。
一般情况下:
为此,您必须使用观察者模式。
制作一个subscribe方法,每个需要了解文本更改的Imyinterface实例都应该调用这个方法。现在在"文本"集合中更改文本并通知所有订阅者。
参见例如。http://www.dofactory.com/net/observer-design-pattern
添加事件
正如spender在评论中提到的那样,您应该在界面中添加一个文本更改事件:
public interface IMyInterface
{
// This event is raised whenever the value of Text is modified:
event Action<IMyInterface, string> TextChanged;
string Text { get; set; }
}
实现接口的类应该在其Text
属性更改时引发该事件:
public class Class1 : IMyInterface
{
public event Action<IMyInterface, string> TextChanged;
protected void RaiseTextChanged(string newValue)
{
var handler = TextChanged;
if (handler != null)
handler(this, newValue);
}
private string _text;
public string Text
{
get { return _text; }
set { _text = value; RaiseTextChanged(value); }
}
}
对事件的反应
任何对IMyInterface
对象的Text
属性的更改感兴趣的代码都可以注册一个事件处理程序:
IMyInterface thing = new Class1();
thing.TextChanged += Thing_TextChanged;
...
void Thing_TextChanged(IMyInterface sender, string newValue)
{
// Do something with the new value
}
您的特定用例
在您的特定情况下,您将向MainPage.xaml.cs
添加以下代码:
// In MainPage's constructor, after the call to InitializeComponent:
popupControl2.TextChanged += PopupControl_TextChanged;
// A separate method in the MainPage class:
private void PopupControl_TextChanged(IMyInterface sender, string newValue)
{
// Do what needs to be done with the next Text value here
}
请注意,Silverlight控件和主页面类都不需要实现该接口。根据我对您目前情况的了解,根本不需要接口,但我想这取决于您没有告诉我们的其他需求。