Frage

Wie es MyClass x = 120; ist, ist es möglich, eine solche individuelle Klasse erstellen? Wenn ja, wie kann ich das tun?

War es hilfreich?

Lösung

Es ist generell eine schlechte Idee zu verwenden implizite Operatoren betrachtet, wie sie sind, nach allem, implizit und hinter dem Rücken laufen. Debug-Code übersät mit Bedienungs Überlastungen ist ein Alptraum. Das sei gesagt, mit so etwas wie folgt aus:

public class Complex
{
    public int Real { get; set; }
    public int Imaginary { get; set; }

    public static implicit operator Complex(int value)
    {
        Complex x = new Complex();
        x.Real = value;
        return x;
    }
}

Sie können verwendet werden:

Complex complex = 10;

oder man könnte jemals den Operator + Überlastung

public static Complex operator +(Complex cmp, int value)
{
  Complex x = new Complex();
  x.Real = cmp.Real + value;
  x.Imaginary = cmp.Imaginary;
  return x;
 }

und verwenden Sie Code wie

complex +=5;

Andere Tipps

Nicht sicher, ob dies ist, was Sie wollen, aber Sie können es erhalten, indem die impliziten Betreiber der Umsetzung: http://msdn.microsoft.com/en-us /library/z5z9kes2(VS.71).aspx

Einen impliziten Operator:

http://msdn.microsoft.com/en-us/library /z5z9kes2.aspx

Zum Beispiel:

public struct MyStruct // I assume this is what you meant, since you mention struct in your title, but use MyClass in your example. 
{
    public MyClass(int i) { val = i; }
    public int val;
    // ...other members

    // User-defined conversion from MyStruct to double
    public static implicit operator int(MyStruct i)
    {
        return i.val;
    }
    //  User-defined conversion from double to Digit
    public static implicit operator MyStruct(int i)
    {
        return new MyStruct(i);
    }
}

„Ist das eine gute Idee?“ ist fraglich. Implizite Konvertierungen ist in der Regel akzeptierte Standards für Programmierer zu brechen; im Allgemeinen keine gute Idee. Aber wenn Sie einige großen Wert Bibliothek tun, zum Beispiel, dann könnte es eine gute Idee sein.

ja, hier ist ein kurzes Beispiel ...

  public struct MyCustomInteger
  {
     private int val;
     private bool isDef;
     public bool HasValue { get { return isDef; } } 
     public int Value { return val; } } 
     private MyCustomInteger() { }
     private MyCustomInteger(int intVal)
     { val = intVal; isDef = true; }
     public static MyCustomInteger Make(int intVal)
     { return new MyCustomInteger(intVal); }
     public static NullInt = new MyCustomInteger();

     public static explicit operator int (MyCustomInteger val)
     { 
         if (!HasValue) throw new ArgumentNullEception();
         return Value;
     }
     public static implicit operator MyCustomInteger (int val)
     {  return new MyCustomInteger(val); }
  }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top