Войти
ФлеймФорумПрограммирование

Интерфейсы в C# 8.0 (2 стр)

Страницы: 1 2 3 4 5 6 7 Следующая »
#15
0:53, 4 сен. 2019

gamedevfor
> Вот этот маразм меня всегда удивлял.
чем и как?


#16
1:00, 4 сен. 2019

skalogryz
ну то что множественно можно было наследовать только интерфейсы.

#17
1:06, 4 сен. 2019

gamedevfor
> ну то что множественно можно было наследовать только интерфейсы.
позволяет избежать проблемы с "реализацией" класса.
(т.к. у интерфейсов нет реализации, только интерфейс)

а так же нет проблем с порядком вызова конструкторов (который может быть при множественном наследовании)
(т.к. у интерфейсов нет конструктров)

#18
1:11, 4 сен. 2019

skalogryz
> т.к. у интерфейсов нет реализации, только интерфейс

теперь я так понимаю есть.

#19
(Правка: 1:20) 1:19, 4 сен. 2019

gamedevfor
> теперь я так понимаю есть.
в общем смысле нет, а в смысле C# есть! теперь есть!
(может быть мы становимся свидетелями сливания языка... н.р. в пользу C++ и Javascript)

#20
1:26, 4 сен. 2019

skalogryz
> в общем смысле нет, а в смысле C# есть! теперь есть!

Это называется подорвались на своей же мине. )))

#21
(Правка: 1:39) 1:38, 4 сен. 2019

gamedevfor
> Это называется подорвались на своей же мине. )))
не совсем.
новые интерфейсы не добавили ни полей в интерфейсы (есть свойства, которые доступны через методы), ни конструкторов.
добавили методы по-умолчанию, ну как бы тоже на реализацию влияет косвенно.

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

посмотрим что будет

#22
1:53, 4 сен. 2019

skalogryz
>добавили методы по-умолчанию

А теперь конструкторы по умолчанию уже сами просятся в интерфейсы. )))

#23
7:50, 4 сен. 2019

skalogryz
> не совсем.

public interface IFoo1 
{
  int test() => 1;
}
public interface IFoo2 
{
  int test() => 2;
}
public class Bar : IFoo1, IFoo2 
{
   public override ToString() => this.test().ToString();
}
что получим в итоге?
#24
7:51, 4 сен. 2019

Denadan
Там дефолтовую реализацию можно вызвать тока явно скастив к интерфейсу. Даже из классов реализующих интерфес

#25
9:09, 4 сен. 2019

кокие хитрые. ладно, тогда сойдет

#26
9:28, 4 сен. 2019

Нихао
> Поясните, кто в теме, зачем это стало возможным?
  Из всего перечисленного у меня вызывают вопросы только явные абстрактные методы и свойства. Остальное давно есть в Java, можно покурить статьи по ней. Например: https://vertex-academy.com/tutorials/ru/java-8-default-i-static-metody/

> Вот ссылка на статью, в которой человек что-то пытается объяснить на
> буржуйском, но у него плохо выходит самому понять суть
  На самом деле если не заниматься ерундой с придумыванием синтетических классов, а просто дать примеры из стандартной библиотеки коллекций, где бы это использовалось, то всё станет понятно. Замени ту ерунду что он приводит на какой-нибудь List и подумай где можно применить такие методы. Например метод List.sort запросто можно сделать дефолтным, так как скорее всего его реализация везде будет одинаковая (до Java 8 она находилась в классе AbstractList), а метод copyOf(Collection<E>) вообще статическим.

Denadan
> что получим в итоге?
  Ошибку компиляции из разряда "Duplicate default methods", которая решается явным указанием чего ты хочешь.

#27
11:06, 4 сен. 2019

Denadan
> кокие хитрые. ладно, тогда сойдет
В чём они хитрые? Сначала ушли от темы ромбовидного наследования, отделив интерфейсы от классов, а потом вернулись к нему, добавив реализацию методов в интерфейсы.

#28
12:33, 4 сен. 2019

Нихао
> Сначала ушли от темы ромбовидного наследования, отделив интерфейсы от классов,
> а потом вернулись к нему, добавив реализацию методов в интерфейсы.
  У ромбовидного наследования нет никаких проблем с методами, это кто-то придумал и все повторяют. Там проблема с полями.

#29
13:40, 4 сен. 2019

alexzzzz
> Если кратко: реализацию по умолчанию для методов интерфейсов разрешили, чтобы
> авторы публичных библиотек могли эти интерфейсы в будущем расширять.
Выпустить новую версию интерфейса? Нет? Если мой код не использует новые методы, значит ему и дефолтовая реализация не нужна. А если использует, то лучше это явно обозначить кастанув к новой версии интерфейса.

Страницы: 1 2 3 4 5 6 7 Следующая »
ФлеймФорумПрограммирование