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

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

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

Нихао
> ...стоп, но так сломается код у всех, кто использовал интерфейс IListener без метода Warning!
Правильно, потому что требование интерфейса является major feature и требует увеличения старшей или средней цифры в версии библиотеки. Обновление библиотеки с такими изменениями автоматически перестаёт быть минорным. Если разработчик библиотеки этого не понимает, то его уже ни что не спасёт.
Если нужна совместимость, можно легко создать новый интерфейс IWarningListener, который можно добавить не только в минорном, но даже в патч-апдейте. Далее, в среднем или мажорном апдейте можно будет удалить этот интерфейс и сделать как хочется.
Библиотеки писать — это не мешки ворочать. Тут думать надо, а не «дефолтный метод, дефолтный метод — и в продакшн».


#61
20:16, 4 сен. 2019

Вся эта бодяга с дефолтными реализациями идет корнями куда нибудь в сторону Haskell
Ну или где то близко валяется

class Eq a where
  (==), (/=) :: a -> a -> Bool 
  x /= y = not (x == y)
  x == y = not (x /= y)
вот тут тайпкласс который содержит два оператора, для обоих имеется дефолтная реализация
таким макаром для реализации этого тайп класса достаточно переопределить только один из них
в целом то фича полезная местами, уменьшает количество дубляжа всякой дефолтовой фигни,
типа допустим всем же нравится писать в каждом классе реализацию генерика IEnumerable<>
который реализует и IEnumerable и в каждом классе реализация выглядит вот так

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator1();
    }

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

#62
8:03, 5 сен. 2019

cNoNim
> Вся эта бодяга с дефолтными реализациями идет корнями куда нибудь в сторону
> Haskell

Да, про Хаскель это ты хорошо подметил, и фича там есть такая. Но с другой стороны, там все таки ФП, и для функций в принципе не надо состояния. И модель полиморфизма я слышал там другая. Да и кто сказал что Хаскель это простой язык. По моему там как раз самые академики программирования живут. Приведу контр пример - Си. .h файлы ведь тоже чтото вроде контракта, и считается плохой манерой фигачить в .h тело методов (ой простите, там жеж функции).

cNoNim
> в целом то фича полезная местами

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

Никто не рискует породить столько ненависти сколько реализация дефолтных интерфейс мемберов, то есть бархатное преврашение интрефейсов в абстрактные классы. И первый вопрос, на который нужно ответить — зачем?

#63
10:02, 5 сен. 2019

slepov
> И первый вопрос, на который нужно ответить — зачем
Вот кстати да. Когда поднимался вопрос про обзёрверы свойств, там все в голосину заорали "это бесполезная хрень, которая только будет всех путать, пишите ручками, если вам надо", а как испоганить интерфейсы (часть языка, которая по сравнению с другими языками, была выполнена однозначнее и понятнее) - так тут их понесло во все тяжкие...

#64
11:34, 5 сен. 2019

pahaa
> обзёрверы свойств
Это что такое?

#65
(Правка: 13:43) 13:43, 5 сен. 2019

Нихао
> Это что такое?
Опциональные функции willSet и didSet, которые вызываются до и после изменения свойства, соответственно. Объявляются в теле свойства аналогично get и set

#66
14:34, 5 сен. 2019

pahaa
Если следовать логике работы с интерфейсами как это делала MS в DX, то в мажорной версии ты можешь удалить все интерфейсы что были и создать новую архитектуру с новыми интерфейсами которые могут называться вовсе не так как назывались предыдущие интерфейсы.

#67
(Правка: 23:43) 18:06, 5 сен. 2019

slepov
> и для функций в принципе не надо состояния.
Ну тут у интерфейсов тоже нет стейта фактически.

#68
21:40, 5 сен. 2019

slepov
> и для функций в принципе не надо состояния.
  Замыкания? Не, не слышал.

#69
(Правка: 0:40) 0:20, 6 сен. 2019

kipar
> Выпустить .NET 5.0 в котором добавить в IEnumerable все что угодно.

В результате твой код, который реализовывал IEnumerable и работал в любой версии NET Framework/NET Core/Mono, в NET 5.0 внезапно перестанет компилироваться. А уже скомпилированный стабильный и сто раз проверенный станет падать в рантайме с каким-нибудь стрёмным TypeInitializationException, MissingMethodException или NotImplementedException.

Default interface members позволяет развивать интерфейсы, не причиняя пользователям этих интерфейсов боли и страданий.

slepov
> А если дефолтовая имплементация требует состояние? То еще и поля понафигачить можно в интерфейс так чтоли? Получается контракты превращаются в какое то месиво фич. Мне лично грустно.

Интерфейс может иметь события. События ― это делегаты, а делегаты имеют состояние, это поля. Про это не вспоминают ― нарушает идеологически строгую картину мира. Про реализации по умолчанию можно так же не вспоминать, хотя мне лично не кажется, что они что-то нарушают, не проникся чё-то этой идеей. Некоторые так отказываются воспринимать unsafe, потому что он якобы притиворечит высоким идеалам. У меня больше утилитарный подход: данная фича удобна/полезна в данном месте ― использую, нет ― не использую. Могу не моргнув написать goto.

skalogryz
> почему нет - собственно форум для этого и создан! обсуждать технологии! чтобы
> пригорало у всех!

Конктруктивное обсуждение технологиий нужно, чтобы разобраться зачем надо, как устроено, как пользоваться. Обсуждения в стиле «чтобы пригорало» представляют собой срач (неспроста и то и другое про жопу) и одновременно напоминают анекдот про японскую бензопилу.

#70
(Правка: 8:14) 7:20, 6 сен. 2019

alexzzzz
> одновременно напоминают анекдот про японскую бензопилу.
анекдот про японскую бензопилу имеет место быть и сейчас.

тот же Си - живее всех живых, а ведь куда ещё ручной топор!
или скажем CGI, старая технология, всё ещё активно используется. 
а какой-нить Silverlight...

#71
(Правка: 9:10) 9:06, 6 сен. 2019

alexzzzz
> События ― это делегаты, а делегаты имеют состояние

Ну ка, покажи мне как извлечь хоть чтото из

event Action Do

Событие в интерфейсе - это для начала пара дырок add/remove, что по сути пара методов. Говорить что делегаты дают какое то состояние - ну тогда и методы состояние. Тогда вообще все есть состояние, приехали.

#72
10:30, 6 сен. 2019

slepov
> Ну ка, покажи мне как извлечь хоть чтото из
Возможность извлечь != состояние
Наличие состояния означает отсутствие гарантии одинаковой работы функции при любых условиях. При чём в данном конкретном случае, в худшем своём проявлении: наличии побочных эффектов.

#73
(Правка: 12:03) 12:00, 6 сен. 2019

pahaa
>Наличие состояния означает отсутствие гарантии одинаковой работы функции при любых условиях.

Да что ты, воно оно каак, про функции ликбез начался.
Меня интересовало только это:

>События ― это делегаты, а делегаты имеют состояние

Просьба показать как это закончилась чтением лекций про функции. Нехорошо.

Zefick
> Замыкания? Не, не слышал.
>
и тут началось.. Не вырывай контекст, товариЩ, речь шла о чистых функциях, коими они являются в Хаскель.

#74
(Правка: 17:06) 17:05, 6 сен. 2019

Вот вам интерфейс с состоянием:

using System;

public interface ITest
{
    private static int Value;

    int DoIt()
    {
        return Value++;
    }
}

public class ClassTest : ITest { }

public class Program
{
    public static void Main()
    {
        ITest test = new ClassTest();

        for (int i = 0; i < 10; ++i)
        {
            Console.WriteLine(test.DoIt());
        }
    }
}

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