2010-05-17 6 views
0
abstract class SettingSaver 
    { 


     public abstract void add(string Name, string Value); 
     public abstract void remove(string SettingName); 


    } 


class XMLSettings : SettingSaver 
    { 

     public override void add(string Name, string Value) 
     { 
      throw new NotImplementedException(); 
     } 

     public override void remove(string SettingName) 
     { 
      throw new NotImplementedException(); 
     } 




    } 

어쨌든 XMLSettings 클래스의 add 함수 이름을 addSetting으로 변경할 수 있지만 SettingSaver의 add 함수를 재정의 할 수 있습니까? 파생 클래스에서 확실히 오버라이드되어야하지만 그냥 다른 이름을 사용할 수 있는지 알고 싶습니다. 미리 고지 : D자식 클래스에 다른 이름으로 부모 클래스로 작성된 추상 메서드를 재정의 할 수 있습니까?

+0

유일한 방법은 addSetting 함수를 만든 다음 add를 호출하는 것입니다. –

답변

9

아니요, C#의 메서드를 재정의 할 때 이름을 변경할 수 없습니다.

물론 메서드를 호출하여 메서드를 재정의하고 구현할 수 있습니다.

은 (명명 규칙의 메모에서, 방법은 일반적으로. 대문자로 시작 PascalCased되지 않는 매개 변수는 일반적으로 소문자로 시작, 낙타 표기법 있습니다.)

+0

재정의 된 함수에서 인수의 이름을 바꿀 수는 있겠지 만? –

+3

@Ranhiru : 예. 그러나 VB (always)와 C# (v4 현재)은 명명 된 인수로 호출을 지원하므로 잠재적으로 매우 혼란 스럽습니다. 나는 그것을 반대하는 것이 좋습니다. –

3

아니 당신은 할 수 없습니다.

동일한 기능을 가진 다른 메서드를 추가 할 수는 있지만 상속 된 메서드를 숨기거나 이름을 바꿀 수는 없습니다.

예를 들어 프레임 워크의 Stream 클래스에는 Close()이라는 메서드가 있습니다. 이것은 Dispose()를 호출 할 때와 완전히 똑같지 만 사용하기 시작하려면 스팀을 "여는"개념에 더 가까운 이름이 지정됩니다. Dispose() 메서드는 제거하지 않았으며 클라이언트에게 동일한 기능에 액세스하는 또 다른 (더 나은 방식으로) 방법을 제공했습니다.

3

아니요 - 이는 다소 Polymorphism (부모가 할 수있는 모든 것, 자녀가 할 수있는 것)을 위반합니다.

새 메서드를 만들고 이전 메서드의 메타 데이터를 사용하여 클래스에 대해 개발중인 모든 사용자가 새 클래스를 사용할 수 있도록 할 수 있습니다.

1

메소드 이름과 인수는 메소드를 식별합니다. 메소드 이름을 변경하면 다른 메소드를 식별하게됩니다. 재정의는 하위 클래스에서 동일한 메소드를 정의하는 것이므로 동일한 메소드 이름을 사용해야합니다.