Статические методы в интерфейсе
От: _NN_ www.nemerleweb.com
Дата: 21.10.13 11:18
Оценка:
CIL позволяет создавать статические методы в интерфейсе: How to: Create Interfaces with Static Methods via IL?.
Что думаете по поводу добавления этой фичи в язык ?

Можно сделать специальный атрибут ,чтобы нельзя было добавить просто так по ошибке, скажем:
interface IA
{
  [StaticInterfaceMethod]
  static F() : int { 0 }
}
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Статические методы в интерфейсе
От: Аноним  
Дата: 21.10.13 12:17
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>CIL позволяет создавать статические методы в интерфейсе: How to: Create Interfaces with Static Methods via IL?.

_NN>Что думаете по поводу добавления этой фичи в язык ?

Зачем?
Re[2]: Статические методы в интерфейсе
От: _NN_ www.nemerleweb.com
Дата: 21.10.13 13:39
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Зачем?


А зачем возможность объявлять типы в интерфейсе
Автор: _NN_
Дата: 18.09.13
?
Если что-то возможно, это не означает что все побегут этим пользоваться, а вот когда вдруг понадобится и оно уже есть, будет приятно.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Статические методы в интерфейсе
От: artelk  
Дата: 21.10.13 14:50
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>CIL позволяет создавать статические методы в интерфейсе: How to: Create Interfaces with Static Methods via IL?.

_NN>Что думаете по поводу добавления этой фичи в язык ?

У меня на эту тему была идея: а что если разрешить в интерфейсе реализацию методов? Внутри эту фичу реализовать как методы-расширения (с неявным this).
Т.е. например:

public interface IA
{
  Add(s : string) : void;

  public Add(o : object) : void
  {
    Add(s.ToString());
  }
}


Хотелось бы, чтобы для клиентского кода были следующие отличия от обычных методов-расширений:

  1. Приоритет этих методов интерфейсов перед обычными методами расширениями при выборе перегрузок (т.е. если есть метод интерфейса с нужной сигнатурой, то методы-расширения даже не искать).
  2. Чтобы не требовалось открывать namespace, в котором реализован интерфейс, для того, чтобы эти методы интерфейса были доступны.
Re[2]: Статические методы в интерфейсе
От: Tom Россия http://www.RSDN.ru
Дата: 21.10.13 14:55
Оценка:
A>У меня на эту тему была идея: а что если разрешить в интерфейсе реализацию методов? Внутри эту фичу реализовать как методы-расширения (с неявным this).
отличная идея! И в методах классов надо разрешить объявлять методы интерфейсов! Вместе со статическими методами в интерфейсах это очень разнообразит нашу девелоперскую жизнь, сделает её полной сюрпризов и неожиданностей!
Народная мудрось
всем все никому ничего(с).
Re[2]: Статические методы в интерфейсе
От: _NN_ www.nemerleweb.com
Дата: 21.10.13 14:57
Оценка:
Здравствуйте, artelk, Вы писали:

A>У меня на эту тему была идея: а что если разрешить в интерфейсе реализацию методов? Внутри эту фичу реализовать как методы-расширения (с неявным this).

A>Т.е. например:

Для этого есть абстрактный базовый класс.
Не нужно это в интерфейсы пихать.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Статические методы в интерфейсе
От: artelk  
Дата: 21.10.13 15:03
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Для этого есть абстрактный базовый класс.

_NN>Не нужно это в интерфейсы пихать.

Для этого есть обычные методы-расширения ( Add(this @this : IA, o : object) : void {...} ), но иногда хочется вот такого
Re[4]: Статические методы в интерфейсе
От: _NN_ www.nemerleweb.com
Дата: 21.10.13 15:07
Оценка:
Здравствуйте, artelk, Вы писали:

A>Для этого есть обычные методы-расширения ( Add(this @this : IA, o : object) : void {...} ), но иногда хочется вот такого


Если бы были операторы расширения, а раз их нет, то как раз это могло бы и решить проблему.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Статические методы в интерфейсе
От: STDray http://stdray.livejournal.com
Дата: 21.10.13 18:24
Оценка:
_NN>CIL позволяет создавать статические методы в интерфейсе: How to: Create Interfaces with Static Methods via IL?.
_NN>Что думаете по поводу добавления этой фичи в язык ?

Я помню, что хотел подобного, но не помню уже зачем.
Что касается статических методов, то хотелось бы иметь возможность по ним кваинтифицироваться по аналогии с F#.
Re[2]: Статические методы в интерфейсе
От: _NN_ www.nemerleweb.com
Дата: 21.10.13 18:29
Оценка:
Здравствуйте, STDray, Вы писали:

_NN>>CIL позволяет создавать статические методы в интерфейсе: How to: Create Interfaces with Static Methods via IL?.

_NN>>Что думаете по поводу добавления этой фичи в язык ?

STD>Я помню, что хотел подобного, но не помню уже зачем.

Ну вот, оказывается это даже возможно =)

STD>Что касается статических методов, то хотелось бы иметь возможность по ним кваинтифицироваться по аналогии с F#.


Что-то сходу не вник.
Это аналог шаблонов С++ в .NET ?
Макросы делают тоже самое, только в менее удобном виде.
Т.е. нужны легковесные макросы для более простых вещей.
Правильно я понимаю ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Статические методы в интерфейсе
От: STDray http://stdray.livejournal.com
Дата: 21.10.13 18:46
Оценка:
_NN>Что-то сходу не вник.
_NN>Это аналог шаблонов С++ в .NET ?
Да.

_NN>Макросы делают тоже самое, только в менее удобном виде.

_NN>Т.е. нужны легковесные макросы для более простых вещей.
_NN>Правильно я понимаю ?
Да все верно. В качестве замены структурного сабтайпинга.
Re[4]: Статические методы в интерфейсе
От: _NN_ www.nemerleweb.com
Дата: 22.10.13 05:21
Оценка:
Здравствуйте, STDray, Вы писали:

Наверное было бы удобно для очень простых вещей.
Другое дело сколько такого кода есть, ведь все начинается с простого а потом сразу становится сложным.
Хороший пример шаблоны С++, вроде началось безобидно с генерации кода, а на деле нужно нормальное метапрограммирование.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Статические методы в интерфейсе
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.10.13 20:08
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>CIL позволяет создавать статические методы в интерфейсе: How to: Create Interfaces with Static Methods via IL?.

_NN>Что думаете по поводу добавления этой фичи в язык ?

Думаю, что стоит сделать поддержку в компиляторе, не запретить в языке. Тогда можно будет использовать это дело для разных реализаций вроде traits в макроса, но при этом не удивлять людей странностями.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Статические методы в интерфейсе
От: _NN_ www.nemerleweb.com
Дата: 22.10.13 20:32
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Думаю, что стоит сделать поддержку в компиляторе, не запретить в языке. Тогда можно будет использовать это дело для разных реализаций вроде traits в макроса, но при этом не удивлять людей странностями.


Забавно конечно, я как-то об этом и не подумал.
Похоже вот она идея решения , осталось всего немного — реализовать %)
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Статические методы в интерфейсе
От: Аноним  
Дата: 23.10.13 07:30
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>CIL позволяет создавать статические методы в интерфейсе: How to: Create Interfaces with Static Methods via IL?.

_NN>Что думаете по поводу добавления этой фичи в язык ?

_NN>Можно сделать специальный атрибут ,чтобы нельзя было добавить просто так по ошибке, скажем:

_NN>
_NN>interface IA
_NN>{
_NN>  [StaticInterfaceMethod]
_NN>  static F() : int { 0 }
_NN>}
_NN>


А как вызывать статический метод? Мне известен только интерфейс, реализация мне неизвестна.
def foo = IA.F()
?
Re[2]: Статические методы в интерфейсе
От: Аноним  
Дата: 23.10.13 07:36
Оценка:
А>А как вызывать статический метод? Мне известен только интерфейс, реализация мне неизвестна.
def foo = IA.F()
?


Мое мнение, для тех, кто будет юзать интерфейс эта фича бесполезна
Re[2]: Статические методы в интерфейсе
От: _NN_ www.nemerleweb.com
Дата: 23.10.13 08:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А как вызывать статический метод? Мне известен только интерфейс, реализация мне неизвестна.
def foo = IA.F()
?


Так на то он и статический, что вызывается только из определенного типа.
Если нужен virtual static
Автор: artelk
Дата: 09.07.12
то это другое.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Статические методы в интерфейсе
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.10.13 12:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А как вызывать статический метод? Мне известен только интерфейс, реализация мне неизвестна.
def foo = IA.F()
?


Статический метод будет не интерфейсом, а реализацией. Так что вызвать его можно без проблем.

Тут вопрос скорее политический. Насколько это будет смущать.

По тому я предлагаю сделать возможность в API компилятора, но не давать ее в синтаксисе. Тогда в макросах можно будет использовать это дело для реализации разных интересных вещей вроде трейтсов, но рядовой пользователь не будет видеть этого.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.