static bool Equal
От: igna Россия  
Дата: 02.03.07 08:50
Оценка:
В Effective C#: 50 Specific Ways to Improve Your C# написано, что никогда не нужно определять статический метод Equals, поскольку статический Object.Equals и так делает то, что нужно, то есть проверяет аргументы на равенство null, и всегда можно использовать его.

Но разве при определении размерного типа не стоит определить статический Equals для тех языков, в которых отсутствует возможность использовать operator ==?

P. S. Книгу видел в магазине, Google-м не нашел, поэтому цитату привести не могу.
Re: static bool Equal
От: Аноним  
Дата: 02.03.07 09:15
Оценка:
Здравствуйте, igna, Вы писали:

I>В Effective C#: 50 Specific Ways to Improve Your C# написано, что никогда не нужно определять статический метод Equals, поскольку статический Object.Equals и так делает то, что нужно, то есть проверяет аргументы на равенство null, и всегда можно использовать его.


I>Но разве при определении размерного типа не стоит определить статический Equals для тех языков, в которых отсутствует возможность использовать operator ==?


I>P. S. Книгу видел в магазине, Google-м не нашел, поэтому цитату привести не могу.
Re: static bool Equal
От: nikov США http://www.linkedin.com/in/nikov
Дата: 02.03.07 09:18
Оценка:
Здравствуйте, igna, Вы писали:

I>Но разве при определении размерного типа не стоит определить статический Equals для тех языков, в которых отсутствует возможность использовать operator ==?


А чем Вас не устраивает экземплярный метод Equals для размерных типов?
Re[2]: static bool Equal
От: igna Россия  
Дата: 02.03.07 09:38
Оценка:
Здравствуйте, nikov, Вы писали:

N>А чем Вас не устраивает экземплярный метод Equals для размерных типов?


А чем он не устраивает того, кто определяет operator ==?
Re[3]: static bool Equal
От: nikov США http://www.linkedin.com/in/nikov
Дата: 02.03.07 09:42
Оценка:
Здравствуйте, igna, Вы писали:

N>>А чем Вас не устраивает экземплярный метод Equals для размерных типов?

I>А чем он не устраивает того, кто определяет operator ==?

Краткость и интуитивность записи?
Re[4]: static bool Equal
От: igna Россия  
Дата: 02.03.07 16:21
Оценка: +1
Здравствуйте, nikov, Вы писали:

N>Краткость и интуитивность записи?


В отсутствии в языке операторов запись Equals(obj1, obj2) может использоваться как более интуитивная нежели наше "объектно-ориентированное" obj1.Equals(obj2). Да, я знаю, C# потребует указания типа, то есть UserType.Equals(obj1, obj2), но язык без пользовательских операций может позаботится о том, чтобы такое указание было не нужно.

Почему я считаю форму obj1.Equals(obj2) недостаточно интуитивной? В частности потому, что она провоцирует написание программ, где a равно b, но b не равно a. А запись Eq(x, y) используется в математике наряду с x=y.
Re: static bool Equal
От: igna Россия  
Дата: 03.03.07 08:04
Оценка:
I>В Effective C#: 50 Specific Ways to Improve Your C# написано, что никогда не нужно определять статический метод Equals, ...

I>Но разве при определении размерного типа не стоит определить статический Equals для тех языков, в которых отсутствует возможность использовать operator ==?


Provide alternate signatures. Most languages do not support operator overloading. For this reason, it is a CLS requirement for all types that overload operators to include a secondary method with an appropriate domain-specific name that provides the equivalent functionality. It is a Common Language Specification (CLS) requirement to provide this secondary method. The following example is CLS-compliant.

public struct DateTime 
{
   public static TimeSpan operator -(DateTime t1, DateTime t2) { }
   public static TimeSpan Subtract(DateTime t1, DateTime t2) { }
}


(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconOperatorOverloadingUsageGuidelines.asp)

Re: static bool Equal
От: Chardex Россия  
Дата: 03.03.07 09:47
Оценка: 3 (1)
Здравствуйте, igna, Вы писали:

I>P. S. Книгу видел в магазине, Google-м не нашел, поэтому цитату привести не могу.

Плохо искал 5-ая ссылка. Только там зарегестрироваться надо.
Re[2]: static bool Equal
От: Chardex Россия  
Дата: 03.03.07 10:03
Оценка:
Здравствуйте, Chardex, Вы писали:

Item 3: Prefer the is or as Operators to Casts
Я всегда думал по-другому, что as надо оч. осторожно использовать, а там обратное рассказывается.
Re[3]: static bool Equal
От: FDSC Россия consp11.github.io блог
Дата: 03.03.07 11:50
Оценка:
Здравствуйте, Chardex, Вы писали:

C>Здравствуйте, Chardex, Вы писали:


C>Item 3: Prefer the is or as Operators to Casts

C> Я всегда думал по-другому, что as надо оч. осторожно использовать, а там обратное рассказывается.

Это надо осторожно использовать, если ты не проверяешь is или результат as на неудачу . А если наоборот — то как раз нормально
Re[2]: static bool Equal
От: FDSC Россия consp11.github.io блог
Дата: 03.03.07 12:05
Оценка:
Здравствуйте, Chardex, Вы писали:

C>Здравствуйте, igna, Вы писали:


I>>P. S. Книгу видел в магазине, Google-м не нашел, поэтому цитату привести не могу.

C>Плохо искал 5-ая ссылка. Только там зарегестрироваться надо.

Как там зарегистя??? У меня сплошные иероглифы....
Re[4]: static bool Equal
От: Alexey Ivanov Россия  
Дата: 03.03.07 12:57
Оценка:
Здравствуйте, FDSC, Вы писали:

FDS>Это надо осторожно использовать, если ты не проверяешь is или результат as на неудачу . А если наоборот — то как раз нормально


Не совсем понятно, что Вы имеете в виду. К книге-то приводятся эффективные методики, но оператор as не дает никакой эффективности(читай производительности) по сравнению с обычным downcast'ом, даже наоборот. Да и код в котором, все приведения делаются с помощью as становится нечитаемым.

((A as B).Method1 as C).Method2

Это пример из реального проекта Видимо, его автор тоже прочел что-то наподобие и стал бездумно везде использовать "эффективную методику"
... << RSDN@Home 1.2.0 alpha rev. 655>>
Re[3]: static bool Equal
От: Chardex Россия  
Дата: 03.03.07 15:38
Оценка: 18 (2) :)
Здравствуйте, FDSC, Вы писали:

FDS>Как там зарегистя??? У меня сплошные иероглифы....

Учите китайский
Re: static bool Equal
От: ie Россия http://ziez.blogspot.com/
Дата: 03.03.07 17:04
Оценка:
Здравствуйте, igna, Вы писали:

I>В Effective C#: 50 Specific Ways to Improve Your C# написано...


Не так давно проглядывал эту книжку. Не понравилась. Много глупых советов.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Превратим окружающую нас среду в воскресенье.
Re: static bool Equal
От: ie Россия http://ziez.blogspot.com/
Дата: 03.03.07 17:07
Оценка:
Здравствуйте, igna, Вы писали:

I>P. S. Книгу видел в магазине, Google-м не нашел, поэтому цитату привести не могу.


здесь
Превратим окружающую нас среду в воскресенье.
Re[2]: static bool Equal
От: Alexey Ivanov Россия  
Дата: 03.03.07 21:28
Оценка:
Здравствуйте, ie, Вы писали:

ie>Здравствуйте, igna, Вы писали:


I>>P. S. Книгу видел в магазине, Google-м не нашел, поэтому цитату привести не могу.


ie>здесь


Не качается, видимо, символы в имени не нравятся
... << RSDN@Home 1.2.0 alpha rev. 655>>
Re[3]: static bool Equal
От: Chardex Россия  
Дата: 03.03.07 21:59
Оценка: 14 (3)
Здравствуйте, Alexey Ivanov, Вы писали:

AI>Не качается, видимо, символы в имени не нравятся

здесь
Re[4]: static bool Equal
От: Alexey Ivanov Россия  
Дата: 03.03.07 22:22
Оценка:
Здравствуйте, Chardex, Вы писали:

C>здесь


Спасибо! Я пытался скачать тоже самое с www.thepiratebay.org, но нет сидеров
Еще раз спасибо, ща прочитаю и убежусь, что оно того не стоило
... << RSDN@Home 1.2.0 alpha rev. 655>>
Re[5]: static bool Equal
От: FDSC Россия consp11.github.io блог
Дата: 04.03.07 15:08
Оценка:
Здравствуйте, Alexey Ivanov, Вы писали:

AI>Здравствуйте, FDSC, Вы писали:


FDS>>Это надо осторожно использовать, если ты не проверяешь is или результат as на неудачу . А если наоборот — то как раз нормально


AI>Не совсем понятно, что Вы имеете в виду. К книге-то приводятся эффективные методики, но оператор as не дает никакой эффективности(читай производительности) по сравнению с обычным downcast'ом, даже наоборот. Да и код в котором, все приведения делаются с помощью as становится нечитаемым.


AI>
AI>((A as B).Method1 as C).Method2
AI>

AI>Это пример из реального проекта Видимо, его автор тоже прочел что-то наподобие и стал бездумно везде использовать "эффективную методику"

Насколько я понимаю, имеется ввиду, делать так:
B ab = A as B;
if (ab != null)
{
  C abc = ab.Method1 as C;
  if (abc != null)
  {
    abc.Method2;
  }
}


Типа, не дожидаться исключения NullReferenceException, когда оно возможно.

А вообще, согласен с вами. Лично я даже не припомню, когда в последний раз as использовал... точно раньше, чем goto, а его я не использовал года 2...
Re[6]: static bool Equal
От: Alexey Ivanov Россия  
Дата: 04.03.07 15:46
Оценка:
Здравствуйте, FDSC, Вы писали:

FDS>Типа, не дожидаться исключения NullReferenceException, когда оно возможно.


IMHO, оператор as для приведения и проверки типа в одном месте, как замена is и последующему касту. Когда же я, например, использую прямой cast, тогда я знаю, что именно такой там должен быть тип, а не иной, и исключение здесь только поможет

FDS>А вообще, согласен с вами. Лично я даже не припомню, когда в последний раз as использовал... точно раньше, чем goto, а его я не использовал года 2...


Радует, что есть взаимопонимание, потому как рекомендуется использовать as вместо приведений и в MSDN FAQ, и на codeproject, что несколько беспокоит

А goto стоило забросить пораньше, об этом еще Страуструп писал в моей первой книге по C++ году эдак в 1998-99
... << RSDN@Home 1.2.0 alpha rev. 655>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.