Re[42]: Отсутствие множ. наследования и тэмплэйтов на CS
От: Igor Trofimov  
Дата: 19.07.02 08:19
Оценка:
IT>>Ну вот сам и ответил — почему
IVNС>Вовсе не ответил

Ну как же? Действительно
DoSome(123, "abc", defparam, true) выглядит лучше, чем
DoSome(123, "abc", , true)


IT>>Еще может удобным был бы синтаксис DoSome (Value1, Value2, DefParam1 = Value3, DefParam5 = Value4), но только тут смысл двоится — то-ли параметру задаешь знаечение, то ли локальной пеерменной... напутать можно.

IVNС>Да ну, это ты предложил изврат какой-то

Ну вот еще сравниваем
SaveToFime(FileName, defparam, defparam, defparam, defparam, true, defparam, defparam)
и
SaveToFime(FileName, SaveAsUnicode = true)

Что читабельнее?
Re[41]: Отсутствие множ. наследования и тэмплэйтов на CS
От: IVaNС Украина  
Дата: 19.07.02 09:48
Оценка:
Здравствуйте Igor Trofimov, Вы писали:

IT>>Ну вот еще сравниваем

SaveToFime(FileName, defparam, defparam, defparam, defparam, true, defparam, defparam)
и
SaveToFime(FileName, SaveAsUnicode = true)

IT>>Что читабельнее?


Читабельнее, вроде бы как, второе. Но 1)в моем случае я при прописывании вызова метода пользуюсь IntelliSence, а, поскольку позиции параметров фиксированы, я сразу вижу, что данный defparam представляет дефолтное значение определенного параметра.
2)ты предлагаешь реализовать непозиционное указание параметров методов. Нечто немного похожее уже реализовано — при указании атрибутов можно устанавливать переменные атрибута именно таким образом (вне конструктора, конечно —
[SaveToFime(FileName), SaveAsUnicode = true])
Подход при нумерации defparam не годится, потому что при добавлении еще одного параметра в метод вся нумерация летит к черту.

Можно сделать вот что: ввести еще одно ключевое слово — param.
SaveToFime(FileName, param.SaveAsUnicode = true)


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

class Class1 {
  string s1;
  void DoSome(string s1, string s2 = "bgbfgf") {
     // local s1
     string s1;
     // local s1 = param s1
     s1 = param.s1;
     // class member s1 = local s1
     this.s1 = s1;
  }
}


По-моему, неплохо. Единственное — компилер должен ругаться, если встретит в одной строке после описания первого непозиционного параметра позиционный, или слово defparam.

Получается очень гибко и красиво.
Задача решена — УРА ! — землекопа полтора !
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.