C#接口用法之控制反转(笔记)
1.定义接口
public interface IVerifyHandler { void Write(string state); bool OnTimeOut(); void OnError(); }
2.在上层中(前端层),继承该接口IVerifyHandler,实现其中的所有方法
//写入状态的方法,实现接口IVerifyHandler public void Write(string state) { //线程调用的方法都不能访问用户控件,必须通过委托调用Form的方法来实现界面更新 if (!this.IsDisposed) this.Invoke( new Action<string>(s => labTips.Text = s), state); } public bool OnTimeOut() { } public void OnError() { }
3.在上层中(前端层)调用类A时传的参数是this本对象即继承了接口IVerifyHandler的这个对象
var a= new A(this);
4.在类A中(后端)定义以下内容
protected IVerifyHandler _stateWriter; //状态输出函数 public A(IVerifyHandler writer) { this._stateWriter = writer; }
//在某个操作之后,调用这个接口里面的方法来输出状态到上层。该方法的具体实现在上层中,并且把state作为它的参数。从而实现控制反转 this._stateWriter.Write(state);
//在某个操作之后,调用这个接口里面的方法即相当于触发执行了上层中具体实现的那些方法。 this._stateWriter.OnError(); this._stateWriter.OnTimeOut();
接口用在控制反转这里,其实对控制反转的理解,通俗一点来讲就是:以前我们的做法都是UI层去调用业务逻辑层,UI起控制作用,现在是反过来,让业务层作为上层,在业务层调用UI层的东西,从而实现控制反转。这里的做法也是如此,这里的类A可以看做业务逻辑层,上层看做是UI层。在类A中定义IVerifyHandler类型的对象,根据该对象可以调用接口里面的方法并写回状态到UI层(因为接口里面的方法具体实现是在UI层)。