2012-01-14 3 views
3

MonoDroid 응용 프로그램에서 사용할 Java 코드 C#을 변환 중입니다. 나는 인터페이스가 선언되고 객체로 초기화되는 일부 스 니펫을 가지고있다. 나는 C#에 이들을 구현하는 최선의 접근법에 대해 100 % 확실하지 않습니다. 예를 들어Java를 C#으로 변환 : 인터페이스 선언 및 인스턴스 만들기?

:

public class NumberPicker { 

    public interface Formatter { 
     String toString(int value); 
    } 

    public static final NumberPicker.Formatter TWO_DIGIT_FORMATTER = 
      new NumberPicker.Formatter() { 
      //some code here 
      }; 

} 

은 무엇 C#에서이 작업을 수행 할 수있는 동등하거나 가장 좋은 방법이 될 것입니다?

답변

6

하나의 기능 (예 : 이벤트 리스너)이있는 간단한 "단일 사용"인터페이스의 경우 대리자 및 anonymous functions 대신 코드를 다시 작성하는 것이 좋습니다.

delegate String Formatter(int n); 
... 

Formatter TWO_DIGIT_FORMATTER = delegate(int n) { 
             //code here 
             }; 

당신은 함수 (TWO_DIGIT_FORMATTER(12)) 같은 TWO_DIGIT_FORMATTER을 사용할 수 있습니다.

익명 클래스 (Java 코드에서 발생하는 것)는 C#에는 존재하지 않지만 위와 같은 경우에는 대리자로 충분합니다.

+1

위임자가 '문자열'대신 'int'를 가져야하지 않습니까? –

+0

그래, 나는 엉망이 됐어. 결정된 – rtpg

0

Formatter 인터페이스를 구현하는 클래스를 만든 다음 해당 인스턴스를 만들어야합니다. 즉

public class MyFormatter : IFormatter 
{ 
    public string ToString(int value) 
    { 
     //implementation 
    } 
} 

그러면 새로운 연산자 MyFormatter의 인스턴스를 생성한다.

public static IFormatter TWO_DIGIT_FORMATTER = new MyFormatter(); 

인터페이스의 'I'접두어는 .net 세계에서 수행되는 것이지만 필수 사항은 아닙니다.

0

그래서이 상황을 처리하는 가장 쉬운 방법은 기본 클래스 내에 개인 중첩 클래스를 만든 다음 필요한만큼 많은 인터페이스를 상속받는 것입니다. IOnClickListener, IOnMouseDownListener와 같은 클래스를 만들고 클래스의 맨 위에 선언하고 필요에 따라 반복해서 사용하십시오. 당신이 반복하거나 같은 방법으로 이름이 인터페이스가있는 경우가 ... 훨씬 쉽게 예를 들어, 명시 적으로

IOnClickListener.OnClick (개체를 보낸 사람, EventArgs입니다) {

}

을 선언 할 수 있습니다

예를 들어, 실제 메소드 이름과 인터페이스 이름을 사용하고 싶을 것입니다. 또한 OnDestroy에 인스턴스를 처리하는 것을 잊지 마십시오.