>  기사  >  백엔드 개발  >  C#의 위임, 이벤트 및 비동기 사용에 대한 간략한 소개

C#의 위임, 이벤트 및 비동기 사용에 대한 간략한 소개

黄舟
黄舟원래의
2017-03-24 11:17:401824검색

이 글에서는 C#에서의 위임, 이벤트, 비동기 관련 지식을 주로 소개합니다. 매우 좋은 참조 값을 가지고 있습니다. 아래 에디터와 함께 살펴볼까요

C# 프로그래밍을 처음 접한지 거의 1년이 되어갑니다. 학습 과정에는 항상 역설적이었던 것들이 많이 있으며, 최근까지 나는 그것들을 이해하지 못했습니다.

이 글에서는 먼저 사용법을 소개한 후 기능을 평가하겠습니다.

1. 위임

기본 사용법:

1. 대리자는 '클래스'와 같습니다. 대리자를 선언한 후 이 특성을 사용하여 여러 대리자를 만들 수 있습니다. (기능은 반환값과 매개변수 유형을 참조)

public 위임자 void SomeKindOfDelegate(<a href="http://www.php.cn/wiki/57.html" target=" _blank">string<code>public delegate void SomeKindOfDelegate(<a href="http://www.php.cn/wiki/57.html" target="_blank">string</a> result); 결과);

2. 1에서 만든 대리자 유형의 대리자를 만듭니다.

public SomeKindOfDelegate aDelegate;

3. 2에서 생성한 특정 대리자에 응답 함수 를 추가합니다. 응답 함수는 1의 '특성'을 준수해야 합니다.

aDelegate +=new SomeKindOfDelegate(aFunctionThatJustForDelegate);
private void aFunctionThatJustForDelegate(string result)
{
MessageBox.Show(result);
}

4. 위의 세 단계를 완료한 후 Invoke를 사용하여 대리인을 호출할 수 있습니다. Invoke는 호출할 대상 함수, 호출 우선순위 및 호출 매개변수를 선택할 수 있습니다.

aDelegate.BeginInvoke("Hello~I'm being invoked!", null, null);

위는 기본 사용법 외에 var, 익명 위임, 람다 위임 등의 방법을 조합하여 사용할 수도 있습니다.

전체 코드:

namespace wtfIsDelegate
{
 public delegate void SomeKindOfDelegate(string result);
 public partial class Form1 : Form
 {
  public event SomeKindOfDelegate aDelegate;
  public Form1()
  {
   InitializeComponent();
   aDelegate +=new SomeKindOfDelegate(aFunctionThatJustForDelegate);
   aDelegate.BeginInvoke("Hello~I&#39;m being invoked!", null, null);
  }
  private void btnDelegate_Click(object sender, EventArgs e)
  {
  }
  private void aFunctionThatJustForDelegate(string result)
  {
   MessageBox.Show(result);
  }
 }
}

위임 사용:

위임의 장점은 비동기(BeginInvoke)를 구현할 수 있고 사용할 수도 있다는 것입니다. 필요한 경우 동일한 매개변수와 반환 값을 사용하여 여러 호출이 동시에 이루어질 때 코드를 단순화합니다.

2. 이벤트

기본 사용법:

1.

public delegate void SomeKindOfDelegate(string result);

2. 이벤트를 정의합니다.

public event SomeKindOfDelegate aDelegate;

3. 이벤트에 응답 기능을 추가합니다.

process.Exited += new EventHandler(CmdProcess_Exited);

4. 이벤트 발생(호출) 방식을 지정합니다. ([트리거링 없이 직접 호출할 수도 있습니다.])

설명:

C#에서 'Event'의 각 유형은 아마도 해당 'Event 핸들러에 해당합니다. 또는 EventHandler'. 예를 들어 Process 클래스의 OutputDataReceived 이벤트는 DataReceivedEventHandler에 해당합니다. PasswordChanged와 같은 비특정 '이벤트'의 경우 모두 RoutedEventHandler 또는 EventHandler와 같은 보다 일반적인 '이벤트 처리기'에 해당합니다. 그러나 'EventHandler'는 중개자 역할만 합니다. '이벤트'가 실제로 트리거된 후에 수행할 작업은 다음과 같이 수동으로 지정해야 합니다.

process.Exited += new EventHandler(CmdProcess_Exited); // 注册进程结束事件 。

EventHandler도 대리자입니다. 예를 들어

public delegate void DataReceivedEventHandler(object sender, DataReceivedEventArgs e);

커스텀 이벤트

커스텀 이벤트는 위임과 비슷한 방식이고,

커스텀 이벤트는 어떤 의미에서는 , 특정 조건의 변화가 '지속적인 쿼리'에서 '가입 및 처리' 관계로 변환되도록 프로그램의 흐름을 변경합니다.

맞춤 이벤트에는

이벤트 개시자, 이벤트 구독 및 이벤트 핸들러와 같은 요소가 있어야 합니다. 매개변수는 개시자에서 핸들러로 전달될 수 있습니다.

이벤트의 '시작'은 'OnKeyDown', 'OnMouseClick'과 같은 일종의 시스템 메시지에 따라 달라질 수 있습니다([이렇게 작성된 소스 코드를 본 적이 없습니다]). , 그리고 특정 조건이 충족되면(예를 들어 같은 문자가 두 번 입력되는 경우) 자체적으로 호출될 수 있습니다(실제로 시스템 메시지를 받는 것도 '조건 충족'으로 간주됩니다). [이런 식으로 더 많은 이벤트가 작성됩니다]

어떤 이벤트에는 뚜렷한 '개시자'가 없습니다.

위임과 이벤트는 어떤 관계인가요?

위임과 커스텀 이벤트의 사용법은 매우 유사합니다. 이벤트는 클래스 내부에서만 호출될 수 있습니다. 대리자이면 어디에서나 호출될 수 있습니다. 호출 방식이 살짝 다른 것 같습니다(매개변수 전달 방식)

호출 방식과 매개변수 전달 방식이 다르기 때문에 이벤트가 좀 더 보수적/안정적으로 보입니다. 이벤트는 또한 '이해'하고 받아들이기가 더 쉽습니다.

델리게이트는 비동기(호출 시작)에 더 많이 사용되는 것 같습니다. 이벤트는 맞춤 이벤트에 더 많이 사용됩니다.

위임과 비동기의 관계는 무엇인가요

비동기는 위임이 달성할 수 있는 기능입니다(또는 '현상'이라고도 할 수 있음). 멀티스레딩(스레드, 스레드풀, 태스크 등)과 같은 다양한 방식으로 구현됩니다.

위 내용은 C#의 위임, 이벤트 및 비동기 사용에 대한 간략한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.