Alim12345 Ответов: 5

О виртуальных классах на языке Си#


Привет Ребята,

Во многих интервью я сталкиваюсь с небольшой путаницей.
У меня есть два класса ChildClass и базовый класс
class BaseClass
    {
        public virtual void Test()
        {
            Console.WriteLine("BaseClass:Test()");
        }
    }
    class ChildClass : BaseClass
    {
        public override void Test()
        {
            Console.WriteLine("ChildClass:Test()");
        }
    }


Теперь мой вопрос заключается в том, что такое использование виртуальных классов
ChildClass B = new ChildClass();
B.Test();
BaseClass C = new ChildClass();
C.Test();


Я могу получить доступ к функции Test () с in heritence и без inheritence также na... Тогда что толку в наследовании?

Пожалуйста, объясните мне.

С Наилучшими Пожеланиями,
Али

5 Ответов

Рейтинг:
2

E.F. Nijboer

вы можете расширить некоторые базовые функции в подклассе.

http://www.csharp-station.com/Tutorials/lesson08.aspx[^]

удачи!


Рейтинг:
2

Toli Cuturicu

Нет такой вещи, как virtual class.
Конечно, вы должны путать классы с методами.
Пожалуйста, ознакомьтесь с очень простой документацией по объектно-ориентированному программированию.


Рейтинг:
1

Member 8543245

мой дорогой друг,
Наследование является единственной особенностью полиморфизма путем создания отношения базового класса к дочернему классу.

используя эту связь, создавая экземпляры базового класса, которые могут ссылаться только на наследуемые дочерние члены класса.

Так,

class base
    {
        public virtual int sum(int a,int b)
        {  return (a+b);}
    }

    class child
    {
        public override int sum(int a, int b)
        {  return (a+b)/10 ;   }
    }
    class Main
    {
      base b =new child();
      b.sum(10,10);
           //this gives ans 2 since it calls child class inherited method
           // this is only possible through inheritance and it code reusability                    
    }


Если вы удовлетворены этим Анс, то дайте обратную связь.


[no name]

Вам не кажется, что через 2 года его интервью почти закончилось?

Рейтинг:
1

rizwan muhammed khan gouri

вы можете воспользоваться следующей ссылкой:-
http://msdn.microsoft.com/en-us/library/9fkccyh4(v=против 80). aspx[^]


[no name]

Вам не кажется, что через 2 года его интервью почти закончилось?

Рейтинг:
0

Sauro Viti

Хитрость заключается в том, что вы можете использовать ссылку на базовый класс для ссылки на унаследованный, и во время выполнения, когда вы вызываете виртуальную функцию, использующую эту ссылку, вызывается переопределенная функция в унаследованном классе. Рассмотрим код ниже:

class BaseClass
{
   public virtual void Test()
   {
      Console.WriteLine("BaseClass:Test()");
   }
}

class ChildClassA : BaseClass
{
   public override void Test()
   {
      Console.WriteLine("ChildClassA:Test()");
   }
}

class ChildClassB : BaseClass
{
   public override void Test()
   {
      Console.WriteLine("ChildClassB:Test()");
   }
}


Теперь предположим, что вы пишете что-то вроде этого:

BaseClass obj = new ChildClassA();
obj.Test();
obj = ChildClassB();
obj.Test()


Результат, который вы получаете, выглядит примерно так:

ChildClassA:Test()
ChildClassB:Test()


Alim12345

Причина моего голосования 4
Хорошо...

Alim12345

Привет, Сауро, Спасибо за ответ. Мне нужно еще одно уточнение. Как и сказал У
BaseClass obj = новый ChildClassA();
если я хочу получить доступ к базовому классу.Функция Test () как я могу получить доступ к этому объекту?
Пожалуйста, ответь мне.
С уважением,
Алимов

Sauro Viti

Чтобы получить доступ к методу базового класса, вы должны написать:
BaseClass obj = новый базовый класс();
параметр obj.Тест();
Если вы имеете в виду "как получить доступ к версии метода BaseClass в дочернем классе", то ответ таков::
1) из базового класса ребенка.Тест();
2) из-за ребенка классе это не возможно

AminMhmdi

подняв объяснить, но то, что это благо, что у нас есть одна ссылка для multi производного класса?? это трюк для сохранения памяти или что-то в этом роде??