2012-03-19 1 views
9

질문 제목에서 알 수 있듯이 인터페이스에 Action<string>을 추가하고 싶습니다. 이것이 가능한가? 그냥 필드, 그리고 컴파일러가 지적 하듯 인터페이스는 필드를 포함 할 수 없습니다 설정/가져 오기없이인터페이스에 동작 <string>을 어떻게 추가합니까?

public interface IYourInterface 
{ 
    Action<string> YourAction { get; set; } 
} 

: 순간이 Interfaces cannot contain fields

+0

대리인을 계약/인터페이스에 추가하는 것은 좋지 않습니다. –

+0

@KirillPolishchuk 당신은 설명 할 수 있습니까? – anatol

답변

22

당신은 속성으로 추가해야 거라고 말한다 . 이것은 당신이이 인터페이스를 구현할 때 (분명히있을 수 있지만 간단한 자동 속성) 당신은뿐만 아니라 실제 속성을 제공해야한다는 것을 의미 않습니다

public class Foo : IYourInterface 
{ 
    public Action<string> YourAction { get; set; } 

    // ... 
} 

당신이 다음에서 Action<string>를 사용할 수 있음을 감안할 때 인터페이스는 :

IYourInterface iFoo = new Foo(); 

iFoo.YourAction = s => Console.WriteLine(s); 

iFoo.YourAction("Hello World!"); 

한스 바와 같이, 당신은 당신의 인터페이스에 표시 할 수 있습니다 단지 get (또는 단지 set) 당신이 원하는 경우. 이것은 클래스 다른 클래스를 가질 수 없다는 것을 의미하지는 않으며, 인터페이스를 통해 액세스 할 수 없다는 것을 의미합니다. 예를 들어 :

public interface IYourInterface 
{ 
    Action<string> YourAction { get; } 
} 

public class Foo : IYourInterface 
{ 
    public Action<string> YourAction { get; set; } 
} 

그래서 위의 코드에서, 당신은 단지 인터페이스를 통해 getYourAction 속성에 액세스 할 수 있지만, 당신은 할 수 set 또는 Foo 클래스 get을.

+0

추가 참고 사항 : 인터페이스에서 "get"만 지정할 수 있습니다.'Action YourAction {get; }'구현에 그것을 남겨 두는 방법/"집합"을 제공할지 여부. –

+0

매우 사실입니다. 당신은 그것이 단지 세트를 가지고 있다고 지정할 수 있습니다 (다소 유용하지는 않지만). –

0

인터페이스는 필드를 포함 할 수 없지만 속성을 포함 할 수 있으므로 추가 할 수 있습니다.

0

내가 인용 :

"인터페이스는 메서드, 속성, 이벤트, 인덱서, 또는 그 4 개 멤버 유형의 조합으로 구성하는 인터페이스가 상수, 필드, 연산자, 인스턴스 생성자, 소멸자를 포함 할 수 없습니다. .. 액션이의 feild 때문에, 또는 유형은 인터페이스 회원 가 자동으로 공개됩니다 정적 멤버를 포함 할 수 없습니다, 그들은 모든 액세스 수정 "

을 포함 할 수 없습니다 - 그것은있을 수없는 인터페이스의 일부. http://msdn.microsoft.com/en-us/library/ms173156.aspx

+5

누가 필드가되어야한다고 말합니까? 그것은 재산 일 수도 있습니다. – rideronthestorm

관련 문제