이것은 내가 좋아하는 다형성에 대한 또 다른 질문에 기반합니다. 그래서 나는 그것을 가지고 놀았고 그것을 이해하기 위해 그것을 수정했습니다. 그러나 그것은 ploymorphism에 대한 나의 이해를 덜걱 덜걱 소리났다.한 번만 호출하면 다형 메서드가 두 번 실행됩니다.
클래스 내부에 인터페이스를 만들고 클래스 "A"를 만들고 인터페이스 메서드를 구현했습니다. 나는 또한 "A"를 확장하는 또 다른 클래스 "B"를 만들었습니다. 그리고 "B"를 확장하는 또 다른 클래스 "C" 당신이 그것을 실행하면
는, 출력은 다음과 같습니다 AEP
두 가지를하는 것이 그것을 얼마나 A : E
다른 방법에서 기본 PARAM 인 반면 BA->
부분이 B : A
클래스에서 제공
BA-> AEP
공지 것을 내가 할 때 메서드가 호출됩니다.
`A instance = new C();
Console.WriteLine(instance.GetName());`
왜?
class Program
{
interface E
{
string GetName(string s);
}
public class A : E
{
public virtual string GetName(string s="AEP")
{
return s;
}
}
public class B : A
{
public override string GetName(string s="BAP")
{
return "BA-> " + s;
}
}
public class C : B
{
public new string GetName()
{
return "CB->";
}
}
static void Main()
{
A instance = new C();
Console.WriteLine(instance.GetName());
Console.ReadLine();
}
}
'return s'를'return s + "bla"'로 변경하면 기본 매개 변수 인 것 같습니다. – Adrian
이것은 중복 된 메소드에 대한 하나의 [C# 선택적 매개 변수] (http : // "AEP"가 표시되고 [C# 키워드 사용법 가상 + 무시]와 [새 기능]에 대해 설명합니다 (http://stackoverflow.com/questions/8909811/c-sharp-optional-parameters-on-overridden-methods). question./ 159978/c-sharp-keyword-usage-virtualoverride-vs-new)'C.GetName'이 전혀 호출되지 않는 이유를 설명합니다 (따라서 출력의 "BA->"부분). 이러한 링크로 인해 문제가 명확하지 않은 경우 의견을 보내 주시기 바랍니다. –
@Zuzlx 왜냐하면 당신은'Main'에서'B'를 사용하지 않기 때문입니다. – Adrian