다음 (LinqPad) 예를 고려하십시오. 클래스 X의 ToString은 가상으로 표시됩니다. 왜 출력이 "Hi, I 'm Y, Hi, I 'm X"와 같지 않은 대신 typename이 인쇄됩니까? 물론 가상 객체를 가상 객체로 정의했기 때문에 ToString 가상 객체를 마킹하는 것은 잘못되었습니다. 여기서 일어나는 일을 이해하려고 노력하고 있습니다. Object.ToString()
을 숨 깁니다 ToString()
라는 X
에서 새로운 가상 메서드를 만드는 것ToString을 기본 클래스에 가상으로 표시하면 어떻게됩니까?
void Main()
{
Y y = new Y();
Console.WriteLine(y);
}
// Define other methods and classes here
class X
{
public virtual String ToString()
{
return "Hi, I'm X";
}
}
class Y : X
{
public override String ToString()
{
return "Hi, I'm Y, " + base.ToString();
}
}
다음은 가상 및 비 가상 메서드에 대한 훌륭한 데모입니다. http://msdn.microsoft.com/en-us/library/aa645767%28v=vs.71%29.aspx –