얼마나 잘못은 그것을 이벤트를 만들기 처리기 위임과 함께 표준(Obj 보낸 사람,시키려면 다음 args)서?

StackOverflow https://stackoverflow.com/questions/1157072

  •  18-09-2019
  •  | 
  •  

문제

이점을 이해하의 표준을 사용 MS 이벤트 처리기 대리인이 서명으로 그것은 당신이 쉽게 확장에서 정보를 전달된 이벤트를 통해 밖으로 깨는 모든 오래된 관계를 기반으로하는 오래된 대리인의 서명.

내가 무엇인지 궁금은 실제로 어떻게 자주 사람들이 규칙을 따르?가 간단 이와 같은 이벤트

public event NameChangedHandler NameChanged;
public delegate void NameChangedHandler(Object sender, string oldName, string newName);

그것은 간단한 이벤트,그리고 나는 거의 긍정적인 것만 인수 나를 알아야에서 NameChanged 이벤트 객체 이름 변경,이전 이름,새로운 이름입니다.그래서 그것을 만드는 별도의 NameChangedEventArgs 클래스 또는 대한 간단한 사건이 허용하는 반환하는 인수를 통해 직접 대리 arguments?

도움이 되었습니까?

해결책

당신은 아무것도 할 수 있는 길을 잘못하면 당신이 가지고있는 유일한 사람을 처리합니다.하지만 그것은 나쁜 생각을 배우는 기준을 충실하도록 그들을 좋은 습관을 유지하는 경우에는 코드는 다른 사람.

그래서 나는 당신입니다.을 약속하는 경우 올바른 방법으로,내가 당신에게 코드 조각을 만들이 훨씬 덜 고통입니다.이에.조각에 파일을 넣어는 파일에서는:

My Documents\Visual Studio2008\코드 조각\Visual C#\내 코드 조각\
(또는 Visual Studio2005 해당되는 경우)

그리고 여기에 조각은;그것을 사용에 대해서 입력 ev2Generic 고 타격 탭:

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>Generic event with two types/arguments.</Title>
      <Shortcut>ev2Generic</Shortcut>
      <Description>Code snippet for event handler and On method</Description>
      <Author>Kyralessa</Author>
      <SnippetTypes>
        <SnippetType>Expansion</SnippetType>
      </SnippetTypes>
    </Header>
    <Snippet>
      <Declarations>
        <Literal>
          <ID>type1</ID>
          <ToolTip>Type of the first property in the EventArgs subclass.</ToolTip>
          <Default>propertyType1</Default>
        </Literal>
        <Literal>
          <ID>arg1Name</ID>
          <ToolTip>Name of the first argument in the EventArgs subclass constructor.</ToolTip>
          <Default>property1Name</Default>
        </Literal>
        <Literal>
          <ID>property1Name</ID>
          <ToolTip>Name of the first property in the EventArgs subclass.</ToolTip>
          <Default>Property1Name</Default>
        </Literal>
        <Literal>
          <ID>type2</ID>
          <ToolTip>Type of the second property in the EventArgs subclass.</ToolTip>
          <Default>propertyType2</Default>
        </Literal>
        <Literal>
          <ID>arg2Name</ID>
          <ToolTip>Name of the second argument in the EventArgs subclass constructor.</ToolTip>
          <Default>property2Name</Default>
        </Literal>
        <Literal>
          <ID>property2Name</ID>
          <ToolTip>Name of the second property in the EventArgs subclass.</ToolTip>
          <Default>Property2Name</Default>
        </Literal>
        <Literal>
          <ID>eventName</ID>
          <ToolTip>Name of the event</ToolTip>
          <Default>NameOfEvent</Default>
        </Literal>
      </Declarations>
      <Code Language="CSharp">
        <![CDATA[public class $eventName$EventArgs : System.EventArgs
      {
        public $eventName$EventArgs($type1$ $arg1Name$, $type2$ $arg2Name$)
        {
          this.$property1Name$ = $arg1Name$;
          this.$property2Name$ = $arg2Name$;
        }

        public $type1$ $property1Name$ { get; private set; }
        public $type2$ $property2Name$ { get; private set; }
      }

      public event EventHandler<$eventName$EventArgs> $eventName$;
            protected virtual void On$eventName$($eventName$EventArgs e)
            {
                var handler = $eventName$;
                if (handler != null)
                    handler(this, e);
            }]]>
      </Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>

다른 팁

EventHandler<T> 일반적인 대리인에 대한 이벤트를 만들에서 파생된 형식 EventArgs 이벤트 데이터입니다.그래서 다른 말로 하면 됩니다.그것은 무언가가는 당신은 항상 알 수 있는 방법을 정확하게 작동 할 때 당신은 그것 때문에 그것은 결코 행하지 않습니다.

편집:

코드 분석 CA1003:사용은 일반적인 이벤트 처리기에 인스턴스
코드 분석 CA1009:선언한 이벤트 올바르게 처리기

실제로 얼마나 자주 사람들[지 사용시키려면 다음 파생 클].

가 발생하지 않을 때 시간이시키려면 다음 파생한 클래스를 사용되지 않았습니다.당신 말대로 자신을 그것이 증가하는 기능 코드를 변경합니다.또한 것을 주장하는 가독성이 향상되기 때문에 쉽게 볼 수 있는 이벤트 처리기입니다.

그것은 가치가 그것을 만드는 별도의 NameChangedEventArgs 클래스,또는 간단한 이벤트를 다음과 같이 그것입 수용을 반환 인수를 통해 직접 대리 arguments?

당신은 말을하는 것을 사용하는 것시키려면 다음에 대한 이벤트를 처리기와 더 params 고 그것을 사용하지 않는 인스턴스에 대해 이와 같습니다.솔직히 하는 것은 단순히지 않는 옵션을 프로그래밍할 때에는 C#.일관성을 유지하는 것이어야,특히 오늘날의 세계에서의 포럼의 이 같은 오픈 소스 프로젝트 등을 잃기 쉽습니다.인 프로그래밍하는 경우에는 이 바위 아래 작업을 수행할 수 있습니다 당신이 무엇을 좋아하지만,큰 C#커뮤니티에 당신을 감사하고 다음과 같은 표준,특히 사용하여 일관성에서 당신은 코드입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top