이 질문에는 이미 답변이 있습니다.
나는 2 개의 과목을 가지고있다.
public class A
{
public A(string N)
{
Name = N;
}
public string Name { get; set; }
public void GetName()
{
Console.Write(Name);
}
}
public class B : A
{
public B(string N) : base(N)
{
}
public new void GetName()
{
Console.Write(new string(Name.Reverse().ToArray()));
}
}
나는 새 객체를 만든다.B
내가 부르려고하는GetName
...에서A
과GetName
...에서B
B foo = new B("foo");
foo.GetName(); // output "oof"
예상 결과"foooof"
나는 이미 시도했다.public new void GetName() : base
하지만 컴파일되지 않습니다.
원하는 출력을 얻으려면base GetName()
방법GetName()
방법Class B
. 예를 들면 다음과 같습니다.
public class A
{
public A(string N)
{
Name = N;
}
public string Name { get; set; }
public void GetName()
{
Console.Write(Name);
}
}
public class B : A
{
public B(string N) : base(N)
{
}
public new void GetName()
{
base.GetName();
Console.Write(new string(Name.Reverse().ToArray()));
}
}
이것은 밖으로 넣어 것입니다foooof
재정의를 사용하고 재정의 된 메서드에서 기본 클래스의 메서드를 호출합니다.
public class A
{
public virtual void GetName()
{
Console.Write(Name);
}
}
public class B : A
{
public override void GetName()
{
base.GetName();
Console.Write(new string(Name.Reverse().ToArray()));
}
}
그만큼virtual
키워드는 메서드를 수정하고 파생 클래스에서 재정의되도록 허용하는 반면new
수정자는 기본 클래스 메서드를 숨 깁니다. 전화base.GetName();
당신은 기본 메소드 BTW를 실행하고 있습니다. 이것이 당신이 사용하는 차이점이없는 이유입니다.new
또는override
내가 추천하는 키워드는 여기에override
.
참고 문헌 :
public class A
{
public A(string N)
{
Name = N;
}
public string Name { get; set; }
public virtual void GetName()
{
Console.Write(Name);
}
}
public class B : A
{
public B(string N) : base(N)
{
}
public override void GetName()
{
base.GetName();
Console.Write(new string(Name.Reverse().ToArray()));
}
}
원하는대로 재정의하거나 새로 사용하십시오. 이러한 시나리오를 처리하는 것.
A foo = new B("foo");
foo.GetName();
또는
A foo = new A("foo");
foo.GetName();
또는
B foo = new B("foo");
foo.GetName();
이msdn 링크당신에게 선명한 그림을 줄 것입니다.
base.GetName();
없이 일하는 것 같다.override
너무 - ToshiGetName
위의 코드에서 언급 한 것과 같은 결과입니다. - S.Akbaribase.GetName();
당신은 기본 메소드 BTW를 실행하고 있습니다. 이것이 사용하는 차이점이없는 이유입니다.new
또는override
이리. 하지만 그걸 알아야 해.new
당신은 기본 메소드를 숨기지 만 오버라이드하면 확장했습니다. - S.Akbarinew
위험하다. 자신이하는 일을 모르는 경우에는 사용하지 마세요. - Patrick Hofman