Frage

Dies könnte ein bisschen ein anti-Muster sein, aber es ist möglich, eine Eigenschaft auf einer C # -Klasse, um mehrere Werte zu akzeptieren?

Zum Beispiel, sagen, ich habe ein öffentliches int Eigentum und ich will es immer einen int zurück, aber ich möchte in der Lage sein, die Eigenschaft zu haben, festgelegt durch eine Dezimalzahl zuweisen, eine ganze Zahl oder einen anderen Datentyp. Also meine Frage ist, ob es möglich, Eigenschaften mehr Werte zu akzeptieren?

War es hilfreich?

Lösung

Ich denke, was Sie zu fragen, meine ist: Wie funktioniert implizite und expliziten Gießarbeit für int und decimal?

Sie fragen nach implizitem Casting, die automatisch ein Objekt in einem anderen definierten Typ coverts. Sie werden dies nicht für eine int und decimal der Lage sein zu tun, weil sie bereits im Rahmen definiert sind, und Sie sind nicht in der Lage, den Umfang der decimal zu reduzieren, indem es zu einem int Gießen. Aber wenn Sie wurden mit, dass als Beispiel für die tatsächlichen Objekte, die Sie erstellt haben Sie die impliziter Link oben, um mehr zu erfahren, wie das funktioniert und wie es zu implementieren.

Aber man kann immer die convert-Methode verwenden, um sie zu dem richtigen Typ zu konvertieren;

public int MyProperty { get; set; }
...
obj.MyProperty = Convert.ToInt32(32.0M);
obj.MyProperty = Convert.ToInt32(40.222D);
obj.MyProperty = Convert.ToInt32("42");

Andere Tipps

Edit:. Mit dieser Methode kann, da die OP nicht verwendet wird, ist speziell auf Eigenschaften gebunden

Ich glaube nicht, das ist möglich mit der Robustheit, die Sie beschreiben. In diesem Fall würden Sie wahrscheinlich besser dran mit einer überladenen Methode (Polymorphismus).

Dies ist, was typischerweise als Setter bekannt ist (oder Mutator) und die Methode überlasten können mehrere verschiedene Arten von Parametern zu akzeptieren. Jeder von ihnen wird eine andere Leistung, wenn Sie es wünschen. Die Art, wie ich sie einrichten kann nicht syntaktisch korrekt sein, aber das ist die allgemeine Idee Sie suchen, glaube ich.

public class MyClass {
  private Int32 mySomeValue;
  public void setSomeValue(Double value) { this.mySomeValue = Convert.ToInt32(value); }
  public void setSomeValue(Int32 value) { this.mySomeValue = value; }
}

Es scheint, wie Sie den Typen zur Laufzeit ermitteln würden. Sie könnten die Eigenschaft haben, ein Objekt übernehmen, die Art zu bestimmen und Ihre Maßnahmen zu ergreifen. Sie müssten Ausnahmen für die Dinge werfen Sie nicht erwarten, natürlich. Wie Sie sagen, wahrscheinlich nicht die beste, aber möglich. :)

Nein. Eine Eigenschaft hat einen einzigen Wert. Sie können alles, um es zuweisen, die auf eine Variable des gleichen Typs zugeordnet werden können.

Eigenschaften sollen wie öffentliche Felder Art suchen. Erstellen Setter-Methoden, oder tut die Besetzung / Umwandlung in den Zuweisungsanweisungen, wie in dem Eigenschaft-Setter im Gegensatz zu.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top