Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 121, средняя оценка - 4.61
Tweekaz
23 / 22 / 1
Регистрация: 21.04.2012
Сообщений: 234
#1

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

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

Что такое абстрактный, виртуальный методы и интерфейсы ?
Вообще ничего не понял по этой теме
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2012, 16:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что такое абстрактный, виртуальный методы и интерфейсы (C#):

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

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

Абстрактный класс, интерфейсы или простые классы с иерархией ? - C#
Понять кое-что из ОПП 1-й Вопрос: Есть описание абстрактного класса abstract class HeroFactory { public abstract Movement...

Что такое свойства, индексаторы, виртуальные методы и абстрактные классы? - C#
Уважаемые,объясните-ка ,пожалуйста,что такое свойства,индексаторы,виртуальные методы и абстрактные классы "НА ПАЛЬЦАХ". Учебник у меня есть...

Задачи по C# (классы, интерфейсы и методы) - C#
Добрый вечер, уважаемые программисты! Очень нужна ваша помощь. Великие трудности с данными задачами: Заранее спасибо большое...

Какие интерфейсы и методы должен реализовывать любой класс? - C#
Какие интерфейсы должен реализовывать любой класс, что бы в последующем использовании было меньше проблем. Например опытным путём я...

8
kolorotur
Эксперт .NET
9214 / 7727 / 1236
Регистрация: 17.09.2011
Сообщений: 13,324
24.04.2012, 16:39 #2
Абстрактный - это метод, который наследуемый класс обязан переопределить.
Виртуальный - это метод, который наследуемый класс может переопределить. То есть метод, имеющий дефолтную реализацию и дающий возможность ее изменить.

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

Интерфейс - это тип, содержащий только открытые абстрактные методы, которые обязаны быть определены в реализующем его классе.
А что значит переопределить , дефолтная реализация и реализующий класс ?
Простите мою необразованность..))
0
SocialEngineer
27 / 27 / 1
Регистрация: 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
kolorotur
Эксперт .NET
9214 / 7727 / 1236
Регистрация: 17.09.2011
Сообщений: 13,324
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
Tweekaz
23 / 22 / 1
Регистрация: 21.04.2012
Сообщений: 234
25.04.2012, 14:22  [ТС] #6
Ещё вопрос, а для чего это обычно используется? ^^
0
ForEveR
В астрале
Эксперт С++
7986 / 4745 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
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
redname
18 / 17 / 0
Регистрация: 18.03.2012
Сообщений: 103
Записей в блоге: 1
25.04.2012, 20:51 #8
kolorotur, ForEveR большое спасибо, но где и для чего используется это всё? Можно пример?
0
kolorotur
Эксперт .NET
9214 / 7727 / 1236
Регистрация: 17.09.2011
Сообщений: 13,324
25.04.2012, 21:12 #9
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
В ООП - абсолютно везде и для абстрагирования метода от конкретной реализации.

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

Ответ: это возможно благодаря полиморфизму, то есть WriteLine принимает на вход ссылку на object, от которого наследуются все остальные классы и у которого определен метод ToString, конвертирующий объект в некую строку. В результате, не важно что именно передадут в этот метод, можно дать 100% гарантию, что у переданного класса будет метод ToString. Который и используется для последующего вывода в консоль уже некой строки.
7
25.04.2012, 21:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2012, 21:12
Привет! Вот еще темы с ответами:

Абстрактный класс и его наследники - не получается вызвать методы - C#
Есть абстрактный класс, есть классы-наследники, реализующие методы абстрактного класса. В одном классе-наследнике хочу добавить методы...

.NET 4.x Что такое метод equals() и что такое класс Object - C#
Ответи на два вопроса очень надо 1) Что такое метод equals(). Чем он отличается от операции ==. 2) Что такое класс Object? Какие в нем...

Дан абстрактный класс «Геометрическая фигура», внутри него определить абстрактные и (или) виртуальные методы - C#
Дан абстрактный класс «Геометрическая фигура», внутри него определить абстрактные и (или) виртуальные методы. Производным классом...

Дан абстрактный класс «Геометрическая фигура», внутри него определить абстрактные и (или) виртуальные методы - C#
Здравствуйте, помогите пожалуйста с данной задачей: Дан абстрактный класс «Геометрическая фигура», внутри него определить абстрактные и...


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

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

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