2011-12-23 2 views
19

C#에서는 인터페이스의 매개 변수 이름을 지정해야합니다.인터페이스 메서드 매개 변수의 이름을 지정해야하는 이유는 무엇입니까?

나는 우리가, 이렇게하면 독자가 의미를 이해 도움이 필요하지 않은 경우에도, 그러나 어떤 경우에는 정말 필요하지 않은 것 이해 :

interface IRenderable 
{ 
    void Render(GameTime); 
} 

나는 위의이 같은 읽을 말할 것 의미 아래로 :

interface IRenderable 
{ 
    void Render(GameTime gameTime); 
} 

일부 기술 이유는 인터페이스의 메소드의 매개 변수에 대한 이름이 필요가 있습니까?


그것은 인터페이스 메소드의 구현은 인터페이스의 방법 사람들에게 다른 이름을 사용할 수 있음을 주목할 필요가있다.

+0

나는 그 방법 서명 이름을 만들 것이라고 생각 일관된!!! –

+0

마지막으로 편집 된 내 편집 내역보기 –

+1

내가 말하는 것은 메소드 선언이 일관된 클래스와 인터페이스와 같다는 것입니다 ... –

답변

19

한 가지 가능한 이유는 선택적 매개 변수를 사용할 수 있기 때문일 수 있습니다.

인터페이스를 사용하는 경우 명명 된 매개 변수 값을 지정할 수 없습니다. 예 :이 구현에서

interface ITest 
{ 
    void Output(string message, int times = 1, int lineBreaks = 1); 
} 

class Test : ITest 
{ 

    public void Output(string message, int numTimes, int numLineBreaks) 
    { 
     for (int i = 0; i < numTimes; ++i) 
     { 
      Console.Write(message); 
      for (int lb = 0; lb < numLineBreaks; ++lb) 
       Console.WriteLine(); 
     } 

    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     ITest testInterface = new Test(); 
     testInterface.Output("ABC", lineBreaks : 3); 
    } 
} 

인터페이스를 사용하는 경우, timeslineBreaks에 대한 기본 매개 변수가 있으므로 인터페이스를 통해 액세스하는 경우, 명명 된 매개 변수없이, 기본값을 사용 할 수 있습니다, 우리는 것 times 매개 변수를 건너 뛰고 lineBreaks 매개 변수 만 지정할 수 없습니다.

인터페이스를 통해 Output 메서드에 액세스하는지 또는 클래스를 통해 기본 매개 변수를 사용할 수 있는지 여부와 값이 무엇인지에 따라 FYI가 달라집니다.

+0

인터페이스가 선택적 및 명명 된 매개 변수 앞에있었습니다. :) – CodeCaster

+0

@CodeCaster 좋은 외침, 가장 가능성이 원래 이유는 분명히 지금은 이유입니다 :) 나는 그들이 이것들과 같은 미래의 기능의 가능성이 그들이라고 지명 된 이유 같아요. – Lukazoid

+0

@ 루카 조이도 잘 했어. 그것은 당신이 그것을 보는 가장 논리적 인 대답입니다. –

9

기술적 인 요구 사항이있는 이유는 없습니다. 그러나 나는 하나의 특별한 이유를 생각할 수 있습니다 :

언급 한대로 인터페이스를 구현할 때 매개 변수 이름은 필요하지 않으며 쉽게 무시할 수 있습니다.
그러나 인터페이스를 사용하는 을 사용할 때 매개 변수가 의미있는 이름을 갖지 않으면 어려움을 상상해보십시오! 인텔리 센스가없고, 힌트도없고, 타입 만이 아닌가? 왝.
이름이 항상 필요한 가장 큰 이유가되어야합니다.

+0

더하기 클래스의 메소드 선언과 일관성이 있습니다. – Thilo

+2

매개 변수에 의미있는 이름이 없으면 "어려움을 상상해보십시오!" - 이클립스에서 자바를 작성하면 대부분의 매개 변수 이름은 "arg0"등으로 표시됩니다 ... – Adam

+1

@codesparkle 축소 된 JavaScript 파일을 읽는 것만 큼 재미있을 것입니다. –

0

좋아,이 가능성은 너무 경박 한 것 같지만, 어쩌면 Visual Studio에서 인터페이스와 스텁을 구현하여 속성과 메서드를 구현할 때 매개 변수의 이름을 알 수 있습니까? 한편

은, VS는 일반적으로 컨트롤의 이름을 지정 아무 문제 ... 나는 인터페이스가 정의 된 이름이 있어야 유효한 기술적 이유를 생각할 수 없다

1

이 없습니다.

자동 구현 속성의지지 멤버처럼 이름이 자동 구현되는 상황을 쉽게 볼 수 있습니다.

1) 그것은 아마도 실질적으로 쉽게 실제 방법과 동일한 규칙을 사용하여 컴파일러에서 인터페이스 유효성 검사를 구현하는 것이었다 :

그러나, 나는 왜 필요 한 3 가지 이유는 아마이 있다고 생각합니다. 비교적 최근에 자동 구현 된 속성이 소개 되었기 때문에 이것이 사소한 컴파일러 변경이라고 생각됩니다.

2) 구현 클래스 (예 : VB)에서 인터페이스 멤버의 자동 생성을 지원하는 언어의 경우 미리 정의 된 이름을 사용하여 인터페이스 구현을 만드는 것이 훨씬 쉽습니다 .

3) 인터페이스가 정의 된 응용 프로그램 외부에 노출 될 수 있기 때문에 이름이 잘못 정의 된 인터페이스와 관련된 모호성을 제거합니다. 의 인터페이스 메소드를 구현하려고 예를 들어

:

void Foo(string, string, int) 

겠습니까 자기 문서화 예보다 훨씬 더 혼란 가능성이 가장 높은 리드. 그러나 인터페이스가 사용 불가능한 경우 기본 기술적 인 문제가 있다고 주장 할 수 있지만, 이것은 기술적 인 것보다는 인터페이스 유용성 문제가 더 많습니다. ...

interface IRenderable 
{ 
    void Render(TimeSpan gameTime); 
} 

... 예를 들어

더 이상 말한다 :

2

인터페이스 방법 parametres을 명명하는 것은 자기 문서에 도움이

interface IRenderable 
{ 
    void Render(TimeSpan); 
} 
관련 문제