Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/119: Рейтинг темы: голосов - 119, средняя оценка - 4.63
24 / 23 / 3
Регистрация: 21.04.2012
Сообщений: 252
1

Что такое абстрактный, виртуальный методы и интерфейсы

24.04.2012, 16:36. Просмотров 23257. Ответов 8
Метки нет (Все метки)

Что такое абстрактный, виртуальный методы и интерфейсы ?
Вообще ничего не понял по этой теме
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2012, 16:36
Ответы с готовыми решениями:

Виртуальный методы, абстрактный класс.
Здравствуйте. Теоретические вопросы. Что такое виртуальный методы и что такое абстрактный класс....

Что такое виртуальный и относительный виртуальный адрес?
Прив. Хочу разобрать одну программку, дизассемблировал ее и начал разбиратся. При помощи API...

Интерфейсы: что такое @Override?
public interface Instruments { final static String key = "До мажор"; abstract public void...

Что такое виртуальный хостинг
ПАРАЛЕЛЬНЫЙ ВОПРОСб Что такое виртуальный хостинг и как его создавать, для чего он нужен:help:

8
Эксперт .NET
13631 / 10535 / 2773
Регистрация: 17.09.2011
Сообщений: 17,887
24.04.2012, 16:39 2
Абстрактный - это метод, который наследуемый класс обязан переопределить.
Виртуальный - это метод, который наследуемый класс может переопределить. То есть метод, имеющий дефолтную реализацию и дающий возможность ее изменить.

Интерфейс - это тип, содержащий только открытые абстрактные методы, которые обязаны быть определены в реализующем его классе.
4
24 / 23 / 3
Регистрация: 21.04.2012
Сообщений: 252
24.04.2012, 16:48  [ТС] 3
Цитата Сообщение от kolorotur Посмотреть сообщение
Абстрактный - это метод, который наследуемый класс обязан переопределить.
Виртуальный - это метод, который наследуемый класс может переопределить. То есть метод, имеющий дефолтную реализацию и дающий возможность ее изменить.

Интерфейс - это тип, содержащий только открытые абстрактные методы, которые обязаны быть определены в реализующем его классе.
А что значит переопределить , дефолтная реализация и реализующий класс ?
Простите мою необразованность..))
0
29 / 31 / 2
Регистрация: 14.04.2012
Сообщений: 152
24.04.2012, 16:54 4
Утрированный пример:
C#
1
2
3
4
5
6
7
8
9
10
11
class LOL{
public abstract lola()
{
//блабла
}
}
class Naslednik : LOL {
public override lola() { //вот это переопределение
//блабла
}
}
//P.S я новичок,мог и ошибиться.

Класс реализует методы ,которые "хранятся" в интерфейсе => класс реализующий
Ты кого читаешь?
0
Эксперт .NET
13631 / 10535 / 2773
Регистрация: 17.09.2011
Сообщений: 17,887
24.04.2012, 16:57 5
Переопределение метода - это когда наследуемый класс объявляет точно такой же метод, как в родительском, но этот метод делает что-то другое:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Parent
{
   // Виртуальный метод. Его может "изменить" потомок.
   public virtual void Foo()
   {
      // Дефолтная реализация. То есть функционал, предоставляемый родительским классом.
      Console.WriteLine("This is method Foo called from Parent");
   }
}
 
class Child : Parent
{
   // Переопределение метода.
   public override void Foo()
   {
      Console.WriteLine("This is method Foo called from Child");
   }
}
Реализующий класс - это класс, который реализует некий интерфейс
C#
1
2
3
4
5
6
7
8
9
10
interface ITest
{
   void Foo();
}
 
// Класс Test - класс, реализующий интерфейс ITest
class Test : ITest
{
   public void Foo() { Console.WriteLine("Foo!"); }
}
4
24 / 23 / 3
Регистрация: 21.04.2012
Сообщений: 252
25.04.2012, 14:22  [ТС] 6
Ещё вопрос, а для чего это обычно используется? ^^
0
В астрале
Эксперт С++
8021 / 4778 / 654
Регистрация: 24.06.2010
Сообщений: 10,547
25.04.2012, 14:33 7
Tweekaz, Для полиморфизма.

Добавлено через 6 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
namespace Test
{
    class Base
    {
        public virtual void print()
        {
            Console.WriteLine (this.GetType ().Name);
        }
    }
    class Derived : Base
    {
        public override void print()
        {
            Console.WriteLine(this.GetType ().Name);
        }
    }
    
    class Program
    {
        public static void Main (string[] args)
        {
            List<Base> lst = new List<Base>
            {
                new Base(),
                new Derived()
            };
            lst.ForEach((x) => x.print());
        }
    }
}
Добавлено через 2 минуты
Интерфейс.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
namespace Test
{
    interface IPrinter
    {
        void print();
    }
    class Base : IPrinter
    {
        public void print()
        {
            Console.WriteLine (this.GetType ().Name);
        }
    }
    class Derived : IPrinter
    {
        public void print()
        {
            Console.WriteLine(this.GetType ().Name);
        }
    }
    
    class Program
    {
        static void print(IPrinter printer)
        {
            printer.print ();
        }
        public static void Main (string[] args)
        {
            print (new Base());
            print(new Derived());
        }
    }
}
4
21 / 17 / 1
Регистрация: 18.03.2012
Сообщений: 111
Записей в блоге: 1
25.04.2012, 20:51 8
kolorotur, ForEveR большое спасибо, но где и для чего используется это всё? Можно пример?
0
Эксперт .NET
13631 / 10535 / 2773
Регистрация: 17.09.2011
Сообщений: 17,887
25.04.2012, 21:12 9
Лучший ответ Сообщение было отмечено как решение

Решение

В ООП - абсолютно везде и для абстрагирования метода от конкретной реализации.

C#
1
2
MyClass mc = new MyClass();
Console.WriteLine(mc);
Вышеприведенный код прекрасно откомпилируется и запустится.
Вопрос: как такое возможно в строго типизированном языке? Ведь при создании методов для класса Console разработчики фреймворка явно не знали, что какой-то Вася где-то в Урюпинске напишет некий класс MyClass, который захочет вывести в консоль с помощью их метода.

Ответ: это возможно благодаря полиморфизму, то есть WriteLine принимает на вход ссылку на object, от которого наследуются все остальные классы и у которого определен метод ToString, конвертирующий объект в некую строку. В результате, не важно что именно передадут в этот метод, можно дать 100% гарантию, что у переданного класса будет метод ToString. Который и используется для последующего вывода в консоль уже некой строки.
8
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2012, 21:12

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

Что такое абстрактный объект?
Что такое обстрактный объект? Как удалить символ из файла на языке С++?

Что такое указатель на абстрактный класс?
В задании сказано - Методы класса должны принимать указатель на абстрактный класс , что это значит...

Что такое виртуальный путь и чем он отличается от физического
Я не сильно понимаю-что такое виртуальный путь и чем он отличается от физического?

Что такое виртуальная функция и абстрактный класс?
здравствуйте товарищи программисты может кто то может объяснить что такое виртуальная фукция и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.