Laden...

Zuweisungsoperator überladen?

Erstellt von tscherno vor 16 Jahren Letzter Beitrag vor 16 Jahren 7.077 Views
tscherno Themenstarter:in
630 Beiträge seit 2007
vor 16 Jahren
Zuweisungsoperator überladen?

Hallo,

ich habe einen eigenen Wertetyp (struct) erstellt und möchte ihm einen Wert zuweisen können so wie ich es auch mit den "eingebauten" Wertetypen mache (MyType x =15). Geht das? Oder muss ich einen Konstruktor benutzen?

Überall steht das man dass '=' nicht überladen kann. Aber die C# entwickler haben es ja mit den standard Wertetypen auch irgendwie gemacht. Oder ist da die Behandlung unterschiedlich?

danke
tscherno

To understand recursion you must first understand recursion

http://www.ilja-neumann.com
C# Gruppe bei last.fm

B
1.529 Beiträge seit 2006
vor 16 Jahren

Du musst dir einen impliziten Konverter schreiben.

Um Beispielsweise int zuweisen zu können, schreibst du:

public struct MyStruct
{
   int intern;
   public MyStruct( int val )
   {
      intern = val;
   }
   public static implicit operator MyStruct( int val )
   {
      return new MyStruct(val);
   }
}
tscherno Themenstarter:in
630 Beiträge seit 2007
vor 16 Jahren

Vielen Dank! 😁

To understand recursion you must first understand recursion

http://www.ilja-neumann.com
C# Gruppe bei last.fm

112 Beiträge seit 2006
vor 16 Jahren
und rauswärts?

Hallo,
was kann jetzt im MyStruct implementiert werden, um den intern-Wert standardmäßig auszugeben?


MyStruct bla = -2;
int i = bla;

Gruß Sprotti

heut debug ich, morgen browse ich, übermorgen cast ich die Königin auf int...

1.378 Beiträge seit 2006
vor 16 Jahren

Der umgekehrte Weg geht nicht, da du dafür Änderungen am Typ int vornehmen müsstest was aber nicht möglich ist.

Lg XXX

112 Beiträge seit 2006
vor 16 Jahren
explizit casten?

wie sieht die Geschichte aus wenn ein expliziter cast herhalten soll. gehts dann?


int i = (int)bla;

heut debug ich, morgen browse ich, übermorgen cast ich die Königin auf int...

M
205 Beiträge seit 2008
vor 16 Jahren

Der umgekehrte Weg geht nicht, da du dafür Änderungen am Typ int vornehmen müsstest was aber nicht möglich ist.

Das ist falsch, der implizite cast kann natürlich auch in die andere Richtung geschrieben werden:


    public struct MyStruct
    {
        int intern;
        public MyStruct(int val)
        {
            intern = val;
        }
        public static implicit operator MyStruct(int val)
        {
            return new MyStruct(val);
        }

        public static implicit operator int(MyStruct val)
        {
            return val.intern;
        }
    }

sowie auch der explizite dazu musst du nur dass schlüsselwort implicit auf explicit ändern.

mfg Markus

112 Beiträge seit 2006
vor 16 Jahren
problem erkannt - gefahr gebannt

Danke für die raschen Antworten

heut debug ich, morgen browse ich, übermorgen cast ich die Königin auf int...