в чем разница между следующим наследованием - PullRequest
0 голосов
/ 14 декабря 2011

Вот простое наследование

public class BaseClass
{
    public string Draw()
    {
        return "Draw from BaseClass";
    }
}

public class ChildClass:BaseClass
{
    public string Draw()
    {
        return "Draw from ChildClass";
    }
}

static void Main(string[] args)
{
   ChildClass c = new ChildClass();
   console.writeline(c.Draw());
}

Вышеприведенная реализация выведет Draw из Childclass

Вот использование с переопределением

public class BaseClass
{
    public virtual string Draw()
    {
        return "Draw from BaseClass";
    }
}

public class ChildClass:BaseClass
{
    public override string Draw()
    {
        return "Draw from ChildClass";
    }
}

static void Main(string[] args)
{
   ChildClass c = new ChildClass();
   console.writeline(c.Draw());
}

Вышеприведенная реализациянапечатает Draw из Childclass

Так в чем же разница между вышеупомянутыми 2 реализациями наследования.

Ответы [ 2 ]

3 голосов
/ 14 декабря 2011

Во втором фрагменте Draw объявлено виртуальным, это означает, что вы можете вызвать унаследованный метод из переменной типа BaseClass.

BaseClass b = new ChildClass ();

b.Draw () // will call ChildClass.Draw 

Документация

Забавно ... Вторая ссылка в списке выше использует те же фрагменты, что и вы.

0 голосов
/ 14 декабря 2011

В первой реализации, если вы вызовете Draw() изнутри BaseClass, на выходе будет «Draw from Base Class». Но во второй реализации это будет «Draw from Child Class». Вот объяснение: http://weblogs.sqlteam.com/mladenp/archive/2007/04/09/60168.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...