.net - How to implement Multi-type IComparable / IEquatable in C# -


let have following class:

public sealed class scalevalue :      icomparable, icomparable<scalevalue>, iequatable<scalevalue> {     public double value     { get; set;}     public string definition     { get; set;}      // interface methods     ... } 

if want make class comparable double should include icomparable<double> , implement way or have way?

and when want class comparable doubles should double.compareto give same result scalevalue.compareto?

and how equals?

i think put responsibilities wrong in design. think best option make scale class containsvalue(double value) method. way can value , keep responsibilities needed.

what class comparable you. make comparable anything, non-generic version of icomparable interface takes object; in implementation of compareto method, can sniff type of object (unless null).

when use generic version of icomparable<t>, you're making statement implement strongly-typed comparison method whatever type parameter t is.

generally, if have icomparable<t> implementation 1 type, probably should have iequatable<t> implementation well.

having icomparable/icomparable<t> implementation means being represented structure has natural ordering it. ordering implies there can equality between 2 instances: if instance a of t not greater or less instance b of t must equal.

to end, if implement icomparable/icomparable<t>, logic dictates implement iequatable/iequatable<t>.

of course, when implement iequatable/iequatable<t>, should override equals , gethashcode.

which in turn means should override comparison operators:

  • == (which implies !=)
  • < , <=
  • > , >=

Comments

Popular posts from this blog

java.util.scanner - How to read and add only numbers to array from a text file -

rewrite - Trouble with Wordpress multiple custom querystrings -

php - Accessing static methods using newly created $obj or using class Name -