Laden...

Klasse soll entscheiden ob sie ein objekt oder ein List<objekt> anlegt

Erstellt von Saftsack vor 4 Jahren Letzter Beitrag vor 4 Jahren 782 Views
S
Saftsack Themenstarter:in
12 Beiträge seit 2018
vor 4 Jahren
Klasse soll entscheiden ob sie ein objekt oder ein List<objekt> anlegt

Hallo zusammen,
ich habe mal eine Grundlegende Frage:
Ich habe in einer Klasse folgende Properties:

public List<ProductConnectionPoint> ProductConnectionPoints { get; set; }
ProductConnectionPoint Point

Gibt es eine Möglichkeit, dass die Klasse entscheidet ob sie nun einen einzelnen Punkt anlegt oder eine Liste von Punkten? Quasi ein "überladen von Properties" - ich weiß, dass das nicht möglich ist. Ich denke an sowas hier:

private _List<ProductConnectionPoint> _ProductConnectionPoints;
public ProductConnectionPoint Point
{

    set {  _ProductConnectionPoints.Add(Point); }
}
public List<ProductConnectionPoint> ProductConnectionPoints
{
    get { return _ProductConnectionPoints; }
    set { _ProductConnectionPoints = ProductConnectionPoints; }
}

Aber ist das sinnig?
Vielen Dank schonmal 😃

16.807 Beiträge seit 2008
vor 4 Jahren

Nein. Wozu soll das gut sein?
Riecht fischig nach Designfehler.

6.911 Beiträge seit 2009
vor 4 Jahren

Hallo Saftsack,

sinnvoll ist das meist nicht -- wie Abt schon sagte.
Sowas kenn ich in der praktischen Verwendung nur als Optimierung von Caches, wenn i.d.R. nur ein Element gecached werden soll.

Anhand deiner Klassen könnte das z.B. so ausschauen:


public class Foo
{
    private ProductConnectionPoint _first;
    private List<ProductConnectionPoint> _points = new List<ProductConnectionPoint>();

    public void Add(ProductConnectionPoint point)
    {
        if (_first == null)
        {
            _first = point;
        }
        else
        {
            _points.Add(point);
        }
    }

    public IEnumerable<ProductConnectionPoint> GetPoints()
    {
        if (_first == null) yield break;

        yield return _first;

        foreach (ProductConnectionPoint point in _points)
            yield return point;
    }
}

public class ProductConnectionPoint { }

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

S
Saftsack Themenstarter:in
12 Beiträge seit 2018
vor 4 Jahren

Vielen Dank für eure Antworten. Ich habe mir schon gedacht, dass das keine gute Idee war - da ich gerade versuche mir C# selbst beizubringen anhand eines konkreten Beispieles, bin ich insbesondere im Hinblick auf sauberes Design sehr dankbar für gute Ratschläge 🙂