powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / что будет с интерфейсами?
65 сообщений из 65, показаны все 3 страниц
что будет с интерфейсами?
    #39856543
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39856603
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

дефолтная имплементация интерфейсов настолько жуткая и сложная в использовании вещь, что если и взлетит, то очень ограниченно, в рамках каких-нибудь сложных библиотек
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39856617
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Осталось добавить поля в интерфейсы чтобы писать дефолтные имплементации.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39856679
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, как будет решаться коллизия в случае множественной реализации интерфейсов с совпадающей сигнатурой методов в дефолтной имплементации.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39856724
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,
Будет требоваться явная реализация?
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39856729
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffОсталось добавить поля в интерфейсы чтобы писать дефолтные имплементации.
Будут, правда пока статические.
Пишут, что все это нужно для взаимодействия/совместимости с java и ios.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39856795
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныИнтересно, как будет решаться коллизия в случае множественной реализации интерфейсов с совпадающей сигнатурой методов в дефолтной имплементации.

в смысле, как?

нет никакой коллизии.
дефолтную реализацию метода интерфейса можно вызвать только через этот интерфейс.

имея ссылку на класс, реализующий некий интерфейс, нельзя вызвать дефолтную реализацию интерфейса.
нужно сначала привести ссылку к интерфейсу.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39856806
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttСон Веры ПавловныИнтересно, как будет решаться коллизия в случае множественной реализации интерфейсов с совпадающей сигнатурой методов в дефолтной имплементации.

в смысле, как?

нет никакой коллизии.
дефолтную реализацию метода интерфейса можно вызвать только через этот интерфейс.

имея ссылку на класс, реализующий некий интерфейс, нельзя вызвать дефолтную реализацию интерфейса.
нужно сначала привести ссылку к интерфейсу.
Это и есть коллизия.
Ты попробуешь уже написанное приложение перевести на C# 8, у тебя приложение написано с модными нынче UnityContainer, а тут тебе опачки! Не работает больше метод отрезолвленного класса.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39856808
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffЭто и есть коллизия.
Ты попробуешь уже написанное приложение перевести на C# 8, у тебя приложение написано с модными нынче UnityContainer, а тут тебе опачки! Не работает больше метод отрезолвленного класса.

Не понял в чём коллизия.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39856847
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttСон Веры ПавловныИнтересно, как будет решаться коллизия в случае множественной реализации интерфейсов с совпадающей сигнатурой методов в дефолтной имплементации.

в смысле, как?

нет никакой коллизии.
дефолтную реализацию метода интерфейса можно вызвать только через этот интерфейс.

имея ссылку на класс, реализующий некий интерфейс, нельзя вызвать дефолтную реализацию интерфейса.
нужно сначала привести ссылку к интерфейсу.Во-первых, фактически не "интерфейс имеет" дефолтную реализацию, а его члены могут ее иметь или не иметь. Дефолтная реализация члена интерфейса означает, что явно этот член в классе реализовывать не нужно. А во-вторых, если же реализация присутствует, то ссылка, приведенная к интерфейсу, не должна дергать дефолтные реализации членов, иначе по писе пойдут все реализации в классах и их оверрайды. То есть накроется один из столпов ООП - полиморфизм.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39856848
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А коллизии действительно нет.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39856857
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот эта хрень




полностью аналогична этой:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public interface ILogger
{
    void Log(LogLevel level, string message);
    void Log(Exception ex);
}

public abstract class BaseLogger 
{
    public void Log(Exception ex) => Log(...);
}

public class InitialLogger : BaseLogger, ILogger 
{
    public void Log(LogLevel level, string message)
    {
    ...
    }
}


Ровно та же "коллизия", которой нет. Просто синтаксический сахар, делающий ненужными некоторые базовые классы.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39856899
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyРовно та же "коллизия", которой нет. Просто синтаксический сахар, делающий ненужными некоторые базовые классы.
Ну хорошо, а если
public class InitialLogger : ILogger1, ILogger2
и в ILogger1, и в ILogger2 есть своя дефолтная реализация void Log(Exception ex), а в самом InitialLogger нет? Вроде как коллизия есть?
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39856916
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,

А вот это вопрос интересный. Фактически дефолтные реализации дают нам фишку с++ - множественное наследование. Какой метод будет дергаться через наследника в с++, если два базовых класса имеют одинаковые методы? Не знаю, на плюсах не писал, но ведь как-то это разруливается.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39856918
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно в такой ситуации придется явно реализовать хотя бы один из методов. В этой ситуации приведение к реализованному интерфейсу будет дергать реализацию, а к нереализованному - дефолт. По крайней мере это логично.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39856920
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyLR,

А вот это вопрос интересный. Фактически дефолтные реализации дают нам фишку с++ - множественное наследование. Какой метод будет дергаться через наследника в с++, если два базовых класса имеют одинаковые методы? Не знаю, на плюсах не писал, но ведь как-то это разруливается.
Разруливаться это будет очень просто : при возникновении коллизии ромба компилятор будет выдавать болт, и вызвать нужный метод можно будет только явным приведением к типу, у которого эта коллизия отсутствует. Проверил, всё так и есть.
В общем случае фича именно дефолтных реализаций сильно напоминает EIMI, только без ручного прописывания реализации в имплементоре, так что именно в этой фиче ничего ужасного не вижу. Остальное - пока не знаю. Например, в интерфейсах стали допустимы квалификаторы abstract и virtual. К чему бы это, и для чего - пока представить не могу.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39856921
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, с т.з. CIL интерфейс является абстрактным классом, и теоретически может иметь имплементацию, как и абстрактный класс. И новая фича на уровне IL действительно похожа на абстрактный класс - за вычетом наличия конструктора (неявного) у класса (использовался интерфейс из примеров кода по ссылке выше), и директивы newslot virtual у реализованного метода дефолтной имплементации (т.е. теоретически её можно переопределить, только вот как - пока не нашел):
C#:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
interface IDeveloper
{
  void Foo();
  void LearnNewLanguage(string language)
  {
    Console.WriteLine($"Learning {language} in a default way.");
  }
}

abstract class Developer
{
  public abstract void Foo();
  public void LearnNewLanguage(string language)
  {
    Console.WriteLine($"Learning {language} in a default way.");
  }
}


IL:
Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
.class interface private auto ansi abstract test80.IDeveloper
{
  // Methods
  .method public hidebysig newslot abstract virtual 
    instance void Foo () cil managed 
  {
  } // end of method IDeveloper::Foo

  .method public hidebysig newslot virtual 
    instance void LearnNewLanguage (
      string language
    ) cil managed 
  {
    // Method begins at RVA 0x2084
    // Code size 24 (0x18)
    .maxstack 8

    IL_0000: nop
    IL_0001: ldstr "Learning "
    IL_0006: ldarg.1
    IL_0007: ldstr " in a default way."
    IL_000c: call string [System.Runtime]System.String::Concat(string, string, string)
    IL_0011: call void [System.Console]System.Console::WriteLine(string)
    IL_0016: nop
    IL_0017: ret
  } // end of method IDeveloper::LearnNewLanguage

}

.class private auto ansi abstract beforefieldinit test80.Developer
  extends [System.Runtime]System.Object
{
  // Methods
  .method public hidebysig newslot abstract virtual 
    instance void Foo () cil managed 
  {
  } // end of method Developer::Foo

  .method public hidebysig 
    instance void LearnNewLanguage (
      string language
    ) cil managed 
  {
    // Method begins at RVA 0x20e0
    // Code size 24 (0x18)
    .maxstack 8

    IL_0000: nop
    IL_0001: ldstr "Learning "
    IL_0006: ldarg.1
    IL_0007: ldstr " in a default way."
    IL_000c: call string [System.Runtime]System.String::Concat(string, string, string)
    IL_0011: call void [System.Console]System.Console::WriteLine(string)
    IL_0016: nop
    IL_0017: ret
  } // end of method Developer::LearnNewLanguage

  .method family hidebysig specialname rtspecialname 
    instance void .ctor () cil managed 
  {
    // Method begins at RVA 0x20f9
    // Code size 8 (0x8)
    .maxstack 8

    IL_0000: ldarg.0
    IL_0001: call instance void [System.Runtime]System.Object::.ctor()
    IL_0006: nop
    IL_0007: ret
  } // end of method Developer::.ctor
}
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39856981
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныНапример, в интерфейсах стали допустимы квалификаторы abstract и virtual. К чему бы это, и для чего - пока представить не могу.Очевидно, для того, чтобы интерфейсы-наследники были обязаны иметь или могли оверрайдить дефолтные имплементации.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39856982
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Главный вопрос во всем этом - как это продать бизнесу?
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39856988
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныИнтересно, как будет решаться коллизия в случае множественной реализации интерфейсов с совпадающей сигнатурой методов в дефолтной имплементации.
Сон Веры ПавловныРазруливаться это будет очень просто:Собственно, это та же самая коллизия, что у базовых классов.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857004
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyСон Веры ПавловныНапример, в интерфейсах стали допустимы квалификаторы abstract и virtual. К чему бы это, и для чего - пока представить не могу.Очевидно, для того, чтобы интерфейсы-наследники были обязаны иметь или могли оверрайдить дефолтные имплементации.
Нет:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
interface IFoo1
{
  abstract void Bar();
  public virtual void Zot() {}
}

interface IFoo2 : IFoo1
{
  public override void Zot() {} // CS0106 The modifier 'override' is not valid for this item
}


Убираем override - получаем
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
interface IFoo1
{
  abstract void Bar();
  public virtual void Zot() {}
}

interface IFoo2 : IFoo1
{
  public void Zot() {} // CS0108: 'IFoo2.Zot()' hides inherited member 'IFoo1.Zot()'. Use the new keyword if hiding was intended.
}


И никаких требований заимлементить в IFoo2 абстрактный Bar от IFoo1.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857018
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttWorobjoffЭто и есть коллизия.
Ты попробуешь уже написанное приложение перевести на C# 8, у тебя приложение написано с модными нынче UnityContainer, а тут тебе опачки! Не работает больше метод отрезолвленного класса.

Не понял в чём коллизия.
Как я понял из той статьи. Иерархия наследования интерфейсов "ромб". С одной ветки приходит дефолтная реализация метода, с другой объявление, без реализации. Прикладной разработчик резолвит свой класс который наследует низу "ромба". Вызывает метод который он переопределил своем классе. Какой метод будет вызван?
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857038
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныAntonariyпропущено...
Очевидно, для того, чтобы интерфейсы-наследники были обязаны иметь или могли оверрайдить дефолтные имплементации.
Нет:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
interface IFoo1
{
  abstract void Bar();
  public virtual void Zot() {}
}

interface IFoo2 : IFoo1
{
  public override void Zot() {} // CS0106 The modifier 'override' is not valid for this item
}


Убираем override - получаем
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
interface IFoo1
{
  abstract void Bar();
  public virtual void Zot() {}
}

interface IFoo2 : IFoo1
{
  public void Zot() {} // CS0108: 'IFoo2.Zot()' hides inherited member 'IFoo1.Zot()'. Use the new keyword if hiding was intended.
}


И никаких требований заимлементить в IFoo2 абстрактный Bar от IFoo1.Тогда действительно не ясно, нафига они.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857042
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffКакой метод будет вызван?Никакой, компилятор попросит разработчика избавить его от коллизий.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857073
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
Вот такой ромб
Код: 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.
    interface IA
    {
        string A();
    }

    interface IB1 : IA
    {
        string B(); // здесь метод по-умолчанию
    }

    interface IB2 : IA
    {
        string B();
    }

    interface IC : IB1, IB2
    {

    }

    class C : IC
    {
        public string A()
        {
            return "A";
        }

        public string B()
        {
            return "B";
        }
    }


У меня нет C# 8, поэтому не знаю как оно будет.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857082
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня тоже нет, поэтому гадаю на кофейной гуще)
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857097
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Компилятор потребует в С.B() указать явную реализацию.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857100
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это тоже самое:

Код: c#
1.
2.
3.
4.
5.
6.
7.
interface I1 { void Foo(); }
interface I2 { void Foo(); }

class С : I1, I2 
{
    void Foo() {} //неизвестно, кого реализовываем, нужно указать явно
}
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857105
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffУ меня нет C# 8, поэтому не знаю как оно будет.
21962958
ссылка в постинге
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857106
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffУ меня нет C# 8, поэтому не знаю как оно будет.

Коллизии по поводу наследования интерфейсов интерфейсами разрешаются компилятором.

Опять же. Многим кажется, что дефолтная реализация методов интерфейса это типа как методы расширения.
Но нет :0
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857108
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyЭто тоже самое:

Код: c#
1.
2.
3.
4.
5.
6.
7.
interface I1 { void Foo(); }
interface I2 { void Foo(); }

class С : I1, I2 
{
    void Foo() {} //неизвестно, кого реализовываем, нужно указать явно
}


обрати внимание на то, что это деградация по сравнению с классическим Visual Basic.
Полноценная поддержка нескольких интерфейсов одновременно становится невозможной.
И деградация ради идеи "поддержки жизненного цикла интерфейсов", которая,
по крайней мере с первого взгляда, выглядит завиральной.

Из того, что "так сделали в Java", само по себе, вообще ничего не должно следовать.
Штаны на лямках - нам срочно нужно сделать "также".
Также как почему?
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857121
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffУ меня нет C# 8, поэтому не знаю как оно будет.
тут https://sharplab.io тоже не работает
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857134
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyобрати внимание на то, что это деградация по сравнению с классическим Visual Basic.В каком смысле деградация? В классическом VB полноценной поддержки наследования отродясь не было, и даже реализация интерфейсов половинчатая. Чтобы дернуть реализованный метод у класса, нужно в обязательном порядке переменную класса приводить к типу интерфейса, иначе method not found. Все интерфейсы должны использоваться явно, поэтому коллизии исключены.

c# никак не ограничивает разработчика в явном использовании интерфейсов, но по сравнению со старым добрым VB наделяет возможностями неявного использования. По-моему это не деградация, а развитие.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857168
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy...В классическом VB полноценной поддержки наследования отродясь не было, и даже реализация интерфейсов половинчатая....

Реализация интерфейсов это и есть разумная реализация множественного наследования.

AntonariyЧтобы дернуть реализованный метод у класса, нужно в обязательном порядке переменную класса приводить к типу интерфейса, иначе method not found.

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

Antonariy Все интерфейсы должны использоваться явно, поэтому коллизии исключены.

или не использоваться вообще .
И это правильно .

Antonariyc# никак не ограничивает разработчика в явном использовании интерфейсов, но по сравнению со старым добрым VB наделяет возможностями неявного использования. По-моему это не деградация, а развитие.
Не знаю, как это точно называется, но очень похоже на ООП головного мозга.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857213
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фича сомнительной полезности, сомневаюсь, что местные сторожили будут ей активно пользоваться.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857269
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyРеализация интерфейсов это и есть разумная реализация множественного наследования.
Реализация интерфейсов к наследованию вообще никаким боком, потому как интерфейс - это публичный контракт, и его реализация - это реализация заявляемого контракта.

boobyЭто автоматически разделяет ответственности.
И в этом нет ничего ни глупого, ни неудобного.
Ответственности чего разделяет от чего? Класса от его контракта? Это как раз и есть глупость, потому что для внешнего потребителя класс - это в первую очередь его контракт, состоящий в т.ч. и из контракта базовых классов и интерфейсов. Вы всегда перед вызовом метода базового класса приводите тип?

boobyНе знаю, как это точно называется, но очень похоже на ООП головного мозга.
Лучше узнать, а то в такой аргументации видны только одни эмоции.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857288
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesфича сомнительной полезности, сомневаюсь, что местные сторожили будут ей активно пользоваться.Я буду, потому что такой кейс 21962841 у меня случается. Можно с чистой совестью выкинуть базовый класс.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857306
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

правильный ответ на вашу ремарку составляется методом перестановки ваших же слов.
И лучше, чтобы вы попробовали сделать это сами.

Что до эмоций - у меня их нет совсем.
Вместо эмоций есть уверенность в том, что "фича" будет использоваться обязательно .
И не просто кто-то скажет: - "как же стало хорошо, как же я жил до сих пор без этого",
более того - обязательно кто-то скажет: "вот только ради этой великолепной возможности я и перешел на c# с языка имярек".
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857344
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyAntonariy...В классическом VB полноценной поддержки наследования отродясь не было, и даже реализация интерфейсов половинчатая....

Реализация интерфейсов это и есть разумная реализация множественного наследования.

AntonariyЧтобы дернуть реализованный метод у класса, нужно в обязательном порядке переменную класса приводить к типу интерфейса, иначе method not found.

Это автоматически разделяет ответственности.
И в этом нет ничего ни глупого, ни неудобного.В программировании на ассемблере тоже нет ничего глупого или неудобного. Как нет ООП и кучи иных шаблонов программирования, облегчающих производство кода.

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

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

boobyAntonariy Все интерфейсы должны использоваться явно, поэтому коллизии исключены.

или не использоваться вообще .
И это правильно .Ну не используйте, что ж так курсив надрывно мусолить. В вашем случае более правильным будет вообще сишарп не использовать. Back to Basics! :)

YouTube Video
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857355
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyСон Веры Павловны,

правильный ответ на вашу ремарку составляется методом перестановки ваших же слов.
И лучше, чтобы вы попробовали сделать это сами.
С чего бы это? Бремя доказательства лежит на утверждающем.
boobyЧто до эмоций - у меня их нет совсем.
Использование негативно окрашенных эпитетов вместо явной предметной аргументации и есть признак эмоций. Если эмоций нет - давайте аргументы, а не вот эти все "деградации", "завиральные идеи", и прочие "штаны на лямках".
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857422
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy...
А вот есть сигнатура не уникальная, разработчику придется определиться с интерфейсом.
...

вы не заметайте под ковер существо дела - не "определиться", а выбрать, какой единственный вариант
единственного интерфейса, из заявленного к наследованию множества, будет реализован.
Конечно, вы можете купить автомобиль Форд-T любого цвета, при условии, что он чёрный.
Это как раз следствие вашего удобства и прогресса вашего компилятора.

PS
Очень сильно надеюсь, даже уверен, и совершенно счастлив тем, что c# мне уже не придется использовать никогда.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857435
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны...
С чего бы это? Бремя доказательства лежит на утверждающем.
...

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

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

попробуйте разобраться с этим вашим утверждением самостоятельно.
Где его концы и начала, и кто с кем и как связан.
И должно ли из него следовать, что класс сам по себе не предоставляет публичный контракт своего использования и не имеет интерфейса.
Ведь у вас штаны не лямках?
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857499
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyОчень сильно надеюсь, даже уверен, и совершенно счастлив тем, что c# мне уже не придется использовать никогда.
До свиданья!
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857504
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyPS
Очень сильно надеюсь, даже уверен, и совершенно счастлив тем, что c# мне уже не придется использовать никогда.c# тоже рад, что вы больше никогда не будете его использовать.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857562
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

ха-ха-ха))) Вам бы в каком-нибудь реалити-шоу выступать, вроде бы там такой стиль дискуссий (лет 20 назад именно такой и был там).
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857564
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR, у Окнах Нагиева? :D
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857566
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВboobyОчень сильно надеюсь, даже уверен, и совершенно счастлив тем, что c# мне уже не придется использовать никогда.
До свиданья!
Всего доброго, хотя с вами мы даже не здоровались в этом топике.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857568
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes, не знаю - раз, ну может два, посмотрел этот жанр в те далекие времена, ну, сами понимаете, этот жанр для бессмертных - у них времени дофига))
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857569
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyboobyPS
Очень сильно надеюсь, даже уверен, и совершенно счастлив тем, что c# мне уже не придется использовать никогда.c# тоже рад, что вы больше никогда не будете его использовать.
у вас нет возможности сказать "тоже" прямо потому, что мой исходный пост был обращён непосредственно и лично к вам.
Но я принимаю ваш выход из беседы, впервые за несколько последних попыток разговора,
пригодный к интерпретации в разумных терминах.

Удачи и удачи и счастья и ещё раз удачи в деле получения удовольствия от программирования на самом лучшем из языков, у которого все, до самых мелочей сделано, как в самом вражеском и непригодном к использованию языков, которым владеет единственная корпорация и имя которому Java.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857597
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть еще и java-сообщество избавлено от вашей прикладной деятельности? А жизнь-то налаживается. Так, глядишь, и средний уровень мирового говнокода заметно повысится.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857604
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy...средний уровень мирового говнокода ...
Ай-ай...
Это вы программируете на самых лучших из всех иных языков.
Вас миллионы востребованных повсеместно.
Вы - это и есть уровень.
И самые лучшие из языков развиваются только и исключительно для вашего удобства.

Зачем же ты меня в своих миллионах уровня замазываешь?
И особенно, с учётом того, что и слущшать не хочешь...

Антонарий, да ты - лучший!
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857641
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пошла жара :)
Какие к чёрту интерфейсы...
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857642
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyчто c# мне уже не придется использовать никогда

а до этого били палками и макали в C# лицом
соболезную вашей боли
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857644
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
Дима угомонись - ночь на дворе...

PS
солидарность с коллегами - это большое зашибись, но неплохо было бы и слово какое,
по случаю подходящее, произнести.
PS2
Твое самолюбование мне известно, но в целом оно не не выглядит как шизофреническое.
Подумай над ключевым словом, подходящим к теме топика...
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857654
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а.. понял, очередной самоутверждающийся генератор бреда подъехал
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857657
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttа.. понял, очередной самоутверждающийся генератор бреда подъехал
мда... Что-ж, слив засчитан, Антонарий пока, действительно, объективно - лучший.

Он несколько раз за топик ближе всех подошёл к нужному слову, но ни разу не произнёс его.

При этом нутром чуя, что заявленная фича - это именно то, без чего он дальше жить не будет.

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

Специально для него, Антонария, и дается возможность использовать интерфейсы не в
качестве притянутых Сном Веры Павловны из замшелых скрижалей "протоколов",
а в качестве современных (известных с самых первых версий Pascal, как минимум) traits .

Но это не то, что во всяких утиных языках с динамической типизацией, или совсем замшелых Pascal, имитирующих сияние ООП противными структурами.

Это чистая, с Java списанная, идея о том, что мы уже не помним, зачем вообще ввели в синтаксис языка интерфейсы как синтаксические конструкции - не больно они были нам и нужны внутри наших собственных сред.

Да и была это дичь и нелепая реализация раньше, только заради утилитарного кода, которого иным способом, до внедрения делегатов и обобщений и писать-то разумным
способом иначе не могли.
Зато таперь , когда есть обобщения и делегаты,
и нам почти, за вычетом ну уж совсем дико никому не нужных, бессмысленных и устарелых ситуаций новые интерфейсы в смысле "протоколов" никак не сдались, жизнь внезапно улучшится.

У нас же ведь уже написаны 100500 классов, реализующих теперь уже бессмысленные интерфейсы, и есть унаследованный утилитарный код, использующий их.
Вот теперь, в пятницу, сразу после дождя в четверг, мы усовершенствуем этот код, добавив новый метод в интерфейс с реализацией по умолчанию.
И нам не нужно менять ни строчки ни в одном из 100500 классов.

Очевидно, что Антонарию жить дальше без этого невозможно.
И, хотя раньше он думал, что ему невозможно жить без явной иерархии наследования
классов, теперь у него новая счастливая невозможность, благодаря которой он даже
откажется от одного из базовых классов.

Почему для реализации статически проверяемых внедрений методов (traits) нужно было
дословно использовать тот же заход, что и в Java - не имеет значения.

Кто вспомнит завтра, что [Сон Веры Павловны] говорил про интерфейсы вчера...

Счастье будущего использования уже пришло , причем само .
Глупо помнить о "протоколах", когда впереди сплошная радость бесшовного внедрения новых методов как собственных методов класса, без исправления единой строчки в них и,
как бонус, отказ от наследования от одного из абстрактных классов.

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

Счастья вам от нового программирования, ребята.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857659
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyПочему для реализации статически проверяемых внедрений методов (traits) нужно было
дословно использовать тот же заход, что и в Java - не имеет значения.

хз чё вы к этой несчастной джаве прицепились

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

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

и что изменилось, внезапно? так и есть.

boobyЧто-ж, слив засчитан

вот было бы кому и что сливать. вы, наверное, несказанно радуетесь что умнее табуретки и не преминёте об этом всем и каждому сообщать? ))
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857661
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

рефлексия - это к доктору.

Не всегда надо произносить слова, которые где-то слышал, после того, как свет погас.
Всего доброго, Дима - любуйтесь собой и рефлексируйте дальше уже самостоятельно.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857726
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyЗато таперь, когда есть обобщения и делегаты,можно писать еще больше треша и угара.

Как раз сейчас переписываю проект, чуть более чем на половину построенный на делегатах. Делегаты были применены для построчной обрабатывать записей, то есть берется запись из List и передается аргументом в делегат, в делегате она обычно как-нибудь преобразовывалась в object[] и отправлялась в эксель. Сделано это было для того, чтобы юзер в любой момент мог прервать процесс обработки и вывода данных (бизнес и output в одном делегате), если ему надоест ожидание. В результате такого подхода код превратился с одной стороны в невразумительный сильно связанный фарш, хотя по идее делегаты должны ослаблять связи, с другой стороны распух из-за условий, при которых в одном и том же делегате разные записи приходилось обрабатывать по-разному, и в итоге стал безысходно тромозным говном. Что такое построчная работа с экселем не нужно объяснять тем, кто работал с экселем. От безысходности авторы пару раз даже применили выкладывание результатов пачками по 50 записей. Собирая пачку делегатом.

В общем, я это говно выкидываю, не читая. Теперь берутся исходные модели, линком собираются в финальную модель, та пребразовывается в object[,] и вываливается в эксель целиком. И все это происходит в одной процедуре, написанной декларативным языком. Я уже начинаю забывать, для чего нужны for, foreach и while. Юзер потерял возможность прерывать процессы, но так же потерял нужду прерывать большую их часть, так как они заметно ускорились.

А вот ООП-структура была мало затронута изменениями. Самые большие изменения произошли при перемещении некоторых слоев в отдельные сборки.

И в том же солюшене отдельной кучкой проектов обосновалась система (по своей структуре на меньшее определение оно не тянет) сохранения настроек, за каким-то хером задуманная универсальной. При том, что в нее же вкорячен некоторый UI, от которого универсальностью даже не пахнет. Вообще без делегатов, но напичканная ВСЕМИ ООП-шаблонами, мало-мальски котирующимися на собеседованиях. После ее глубокого изучения остался всего один вопрос: блеать, как настройки-то сохраняюца???

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

У меня есть интерфейсы, в которых методы принимаю делегаты, а все типы - дженерики с ограничениями по другим интерфейсам. И нет проблем, все читаемо, как букварь.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857730
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyhVostt,

рефлексия - это к доктору.А рефлексия вообще незаменимая штука в низкоуровневом коде. И StackTrace жизнь упрощает, если не месить его в одной куче с async/await.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857744
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ООП - говно.
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39857776
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosООП - говно.Это точка зрения мухи или прынцессы? :)
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39858054
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyНе всегда надо произносить слова, которые где-то слышал, после того, как свет погас.

какие-то нелепые и неуместные пассажи

boobyВсего доброго, Дима - любуйтесь собой и рефлексируйте дальше уже самостоятельно.

непонятно с чего вы взяли, что я Дима, видимо это шиза обыкновенная
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39858056
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosООП - говно.

звучит как название шлягера )
...
Рейтинг: 0 / 0
что будет с интерфейсами?
    #39858072
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
звучит как название шлягера )
репера нарика :)
...
Рейтинг: 0 / 0
65 сообщений из 65, показаны все 3 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / что будет с интерфейсами?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]