C# 인터페이스 콜백

일반적인 상황에서, 우리는 대상을 만들고, 즉시 그것을 사용하는 방법을 사용한다.그러나 어떤 경우 어떤 장면이 나타난 후나 조건이 충족되었을 때 이 대상을 호출하는 방법을 원한다.리셋하면 이 '호출 지연 대상 방법' 의 문제를 해결할 수 있다.이 호출된 방법의 대상을 리셋 대상이라고 부른다.리셋을 실현하는 원리는 다음과 같다. 먼저 리셋 대상을 만들고 컨트롤러 대상을 만들고 리셋 대상이 호출되어야 하는 방법을 컨트롤러 대상에게 알려준다.컨트롤러 대상은 어떤 장면이 나타나거나 조건이 만족하는지 검사하는 것을 책임진다.이 장면이 나타나거나 이 조건이 충족되면 자동으로 대상을 리셋하는 방법을 호출합니다.다음은 C# 콜백의 작은 예입니다.
using System; 
using System.Collections.Generic; 
using System.Text; 
namespace ConsoleApplication1 
{ 
     class Program 
     { 
         static void Main(string[] args) 
         { 
             //         ,             
             Controller obj = new Controller(new CallBack()); 
             //   
             obj.Star(); 
         } 
     } 
     public interface IBack 
     { 
         void run(); 
     } 
     public class CallBack : IBack 
     { 
         public void run() 
         { 
             //              
             System.Console.WriteLine(DateTime.Now); 
         } 
     } 
     public class Controller 
     { 
         public IBack CallBackObj = null;   //         
         public Controller(IBack obj) 
         { 
             this.CallBackObj = obj; 
         } 
         public void Star() 
         { 
             Console.WriteLine("              ,   ESC  ...."); 
             while (Console.ReadKey(true).Key != ConsoleKey.Escape) 
             { 
                 CallBackObj.run(); 
             } 
         } 
     } 
} 

예시 프로그램이 실행될 때, 언제 CallBack 대상의run () 방법을 호출할지 사용자가 결정하고, 사용자가 키를 두드릴 때마다 컨트롤러 대상은CallBack의run () 방법을 호출합니다.이 예에서 앙상블을 실현하는 관건은 Iback 인터페이스의 도입에 있다.Iback 인터페이스를 사용하지 않고 CallBack 객체를 직접 사용하는 경우 다음과 같은 효과를 얻을 수 있습니다.
public class Controller 
{ 
   public CallBack CallBackObj = null;   //          
   public Controller(CallBack obj) 
   { 
       this.CallBackObj = obj; 
   } 
   public void Star() 
   { 
       Console.WriteLine("              ,   ESC  ...."); 
       while (Console.ReadKey(true).Key != ConsoleKey.Escape) 
       { 
           CallBackObj.run(); 
       } 
   } 
} 

그러나 곰곰이 생각해 보면 Controller 클래스는 CallBack 대상과 연결되고, 만약 다른 유형의 대상을 호출해야 한다면 반드시 Controller 클래스의 코드를 수정해야 한다.만약에 Controller 클래스가 추상적인 인터페이스 변수 Iback을 수신한다면 이 인터페이스를 실현한 모든 대상은 Controller 클래스의 대상에 의해 리셋될 수 있다. Controller 클래스의 코드는 수정되지 않고 코드가 환경에 대한 적응성을 확보하는 것이 좋은 해결 방안이다.

좋은 웹페이지 즐겨찾기