2013-05-03 1 views
0

기본적으로 작업으로 this을 (를) 수행하려고합니다. 적어도 하나의 concretions에서 다른 클래스의 Action이 참조되기 때문에 속성과 반대되는 작업을 수행해야합니다. Action에 추가/제거 만 할 수 있고 실제로 반환하지 않기 때문에 액션을 래핑해야합니다. get이 아닌 add/remove.add/remove가있는 인터페이스에서 Actions를 사용할 수 있습니까?

interface Whatever 
{ 
    Action MyAction { get; } 
} 

class WhateverConcretion : Whatever 
{ 
    Action MyAction 
    { 
     get { return SomeLibraryClass.StaticAction; } 
    }   
} 

내 프로젝트는 그래서 나는 내 수업은 내가 올 때까지 잘 작동 자신의 클래스 -에 싸여 될 것이다 래퍼 클래스에 대한 인터페이스 및 각 플랫폼의 라이브러리에 의존 할 계획 플랫폼 특정 라이브러리에 따라 달라집니다 조치 래핑.

+0

시도해 보셨습니까? 서면으로 잘 작동합니다. 귀하의 링크는 대리인을위한 속성을 사용하는 것뿐만 아니라 이벤트에 관한 것입니다. –

+0

당신이 쓴 것이 잘 작동해야합니다. 나는 당신이 사건을 생각하고 있다고 생각합니다 - 행동은 다른 어떤 것과 마찬가지로 평범한 C# 객체입니다. – Mason

+0

당신은 '행동'유형의 *** 속성 ***을 만들었습니다. 속성에는'get' 및/또는'set'라고하는 하나 또는 두 개의 접근자가 있습니다. 대신 *** 이벤트 ***를 만들려면 유형 ('Action') 바로 전에 키워드'event'를 포함하십시오. 이벤트에는'add'와'remove'라는 두 개의 접근자가 있습니다. 다음은 그 예입니다 :'public event Action MyEvent {add {...} remove {...}}'. '액션'유형은 델리게이트 유형이므로 이벤트에 사용할 수 있습니다. 반환 유형이'void'이고 반올림하지 않는 유형 매개 변수가 없기 때문에 이벤트에 적합한 유형이라고 말할 수 있습니다. –

답변

1

래퍼를 만드는 경우 내부 클래스의 멤버를 해당 멤버의 이름과 유형이 같은 외부 세계에 게시하는 것이 일반적입니다. 메소드를 랩핑하는 것은 쉽다 : 내부 클래스의 te 메소드를 호출하고, 매개 변수를 전달하고 값을 리턴하는 또 다른 메소드를 작성하면된다. 동일한 속성의 경우 : 원하는대로 getter 및 setters를 사용하여 속성을 만들고 내부 인스턴스의 속성에 대한 getter 및 setter를 호출합니다.

이제는 동일하게 적용됩니다. 래퍼 클래스에서 이벤트를 만들고 호출을 내부 클래스로 리디렉션하십시오.

public event Action MyAction 
{ 
    add 
    { 
     SomeLibraryClass.StaticAction += value; 
    } 
    remove 
    { 
     SomeLibraryClass.StaticAction -= value; 
    } 
} 
+0

'add'와'remove' 접근자는 반환 형식이'void'이므로'return' 문은 올바르지 않습니다. –

+0

@Jeppe : 내 복사기 붙여 넣기 오류입니다. 감사! –

관련 문제