В классе B
вы переопределяете ToString()
метод, который Object.ToString()
, потому что вы не унаследовали A
. Теперь рассмотрим приведенный ниже пример,
class A
{
public string ReturnString()
{
return "ClassA::Method";
}
}
class B : A
{
public newstring ReturnString()
{
return "ClassB::Method";
}
}
class Program
{
static void Main(string[] args)
{
A a = new A();
B b = new B();
Console.WriteLine(a.ToString());
Console.WriteLine(b.ToString());
Console.Read();
}
}
Здесь вы скрываете метод в class B
, поскольку вы унаследовали Class A
. Таким образом, вы получите вывод как ClassA::Method
для обоих вызовов методов.
Теперь рассмотрим пример ниже
class A
{
public virtual string ReturnString()
{
return "ClassA::Method";
}
}
class B : A
{
public override string ReturnString()
{
return "ClassB::Method";
}
}
class Program
{
static void Main(string[] args)
{
A a = new A();
B b = new B();
Console.WriteLine(a.ToString());
Console.WriteLine(b.ToString());
Console.Read();
}
}
Здесь мы переопределили метод Class A's
в Class B
. Это означает, что ClassB method
похоже на расширение, или вы можете сказать, что оно имеет другое значение, чем ClassA
. Вы получите вывод, как показано ниже
ClassA::Method
ClassB::Method