2017-11-20 6 views
-2

Mein Ziel ist es, ein statisches Objekt zu erstellen, das sich nicht ändert, wobei die Elementvariablen und die abstrakten Methoden einer Basisklasse verwendet werden, da es mehrere dieser Objekttypen gibt.ist es möglich, abgeleitete Klassenstandardwerte ohne einen Konstruktor zu setzen?

Dies ist ein Beispiel dafür, was ich tun möchte: wie diese

public abstract class BaseThing 
{ 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public decimal Cost { get; set;} 

    public abstract void MethodThatDoesThings(); 
} 

Dann will ich ein abgeleitetes Objekt haben, die Standardwerte dieser Basisvariablen hat, etwas (natürlich nicht funktioniert):

public class DerivedThing : BaseThing 
{ 
    Name = "Name1"; 
    Description = "Description1"; 
    Cost = 1.00; 

    public override void MethodThatDoesThings() 
    { 
     //Actually does things 
    } 
} 

Ist so etwas möglich, ohne einen Konstruktor zu verwenden? Nicht, dass ich dagegen bin, sie zu benutzen, ich bin wirklich neugierig. Im Moment habe ich das Gefühl, dass es meine einzige Option ist, viele statische Klassen zu erstellen, die die gleichen Eigenschaften haben.

+0

Haben Sie die Eigenschaften machen als 'Resümees oder' virtual' so Ableiten Typen müssen (oder im Fall von 'virtual') außer Kraft setzen sie? – bassfader

+0

Nun könnte man 'public new string Name {get; einstellen; } = "Name1"; aber das ist ein bisschen eklig und ein Code-Geruch. Was versuchst du zu machen? – DavidG

+0

@DavidG Ja, das sieht ziemlich eklig aus: 3. Ich versuche nur, den einfachsten Weg zu finden, dieses Objekt ziemlich statisch zu machen und trotzdem eine Vererbungsstruktur zu verwenden, wenn das möglich ist. – Blankdud

Antwort

1

Nein, Sie sollten einen Konstruktor für die abgeleitete Klasse implementieren, um Standardwerte festzulegen. Wenn Sie Standardwerte festlegen möchten, können Sie das so machen;

public class DerivedThing : BaseThing 
{ 
    public DerivedThing(string name = "Name", string description = "Description1", decimal cost = 1.0) 
    { 
     Name = name; 
     Description = description; 
     Cost = cost; 
    } 
    public override void MethodThatDoesThings() 
    { 

    } 
} 
+1

Danke für die direkte Antwort. Ich weiß, es war wahrscheinlich eine dumme Frage. – Blankdud

+0

Gern geschehen. – lucky

Verwandte Themen