2016-05-22 34 views
0

Ich habe ein Stück des Codes hier so.Wie verwende ich BaseClass

class TextBox 
    { 

     TextBox() 
     { 
      _guid = new Guid(); 
     } 
     private Guid _guid; 
     public Guid Guid { 
      get { return _guid; } 
      private set { value = _guid; } 

     } 


     public string Label { get; set; } 
    } 

Allerdings habe ich auch andere Gegenstände wie Button-Klasse, CheckBox-Klasse etc.How Code zu wiederholen, jedes Mal die Umsetzung der Guid Eigenschaften und Erzeugung vermeiden.

+0

Warum benötigen Sie die GUID? – jdweng

+0

Erstellen Sie eine Klasse mit der Guid-Eigenschaft und erben Sie diese Klasse? – Bauss

+1

Sie können die Hierarchie der WinForms-Steuerelemente und die Verwendung der Vererbung untersuchen. Wenn Sie jedoch in einer GUI-Umgebung arbeiten, sollten Sie natürlich darauf achten, dass keine Konflikte mit den vorhandenen Objekten auftreten, die Namespaces verwenden. –

Antwort

1

Sie können eine baseclass erstellen, die die Guid auf Bau instanziiert wird. Jedes Steuerelement wird einfach von der Basis erben.

public class TextBox : Identifier 
{ 
    public string Label { get; set; } 
} 

public class CheckBox : Identifier 
{ 

} 

protected class Identifier 
{ 
    public Guid Guid 
    { 
     get; private set; 
    } 

    protected Identifier() 
    { 
     Guid = new Guid(); 
    } 
} 

Obwohl, wenn der Zweck der Guid eine eindeutige Kennung haben, würde ich empfehlen, nur den Hash der Instanz zu bekommen.

Beispiel:

var textBoxId = MyTextBox.GetHashCode(); 

Hinweis: Wie @Maarteen erwähnt, ist GetHashCode nicht Einzigartigkeit garantieren. Per Dokumentation:

Die Standardimplementierung der GetHashCode-Methode garantiert keine eindeutigen Rückgabewerte für verschiedene Objekte . Darüber hinaus garantiert das .NET Framework nicht die Standardimplementierung der GetHashCode-Methode, und der zurückgegebene Wert ist zwischen verschiedenen Versionen von .NET Framework identisch. Folglich darf die Standardimplementierung dieser Methode nicht als eindeutiges Objekt Bezeichner für Hash-Zwecke verwendet werden.

+0

danke answer.may ist nicht angemessen, hier zu fragen, aber wenn Sie mich darauf hinweisen, werde ich froh zu.Ich möchte HTML-Code aus dieser Klasse generieren.Es gibt einen Weg zu diesem chaotischen Weg, aber wie kann ich das am besten geeigneten Weg. Danke – stackada

+0

Verwenden Sie WPF oder WinForms? –

+0

Web-Basis-Anwendung.Ich möchte nur HTML-Formular generieren.so, dass ich eine Klassenbibliothek erstellen, und es mvc app enthalten. – stackada

0

Wenn Sie eine bestehende Steuerung erweitern möchten, müssen Sie diese Steuerung erben

public class MyTextBox : TextBox 
{ 
    public Guid Guid { get; set; } 
    public string Label { get; set; } 
} 

Sie dies für jede Kontrolle zu wiederholen, da Sie nicht die bestehenden Kontrollen ändern. Wenn Sie Ihre Vererbungshierarchie von Grund auf neu erstellen würden (was bei Steuerelementen nicht möglich ist), würden Sie diese Eigenschaften einfach in der Basisklasse hinzufügen und daraus andere Klassen ableiten.

Wenn Sie komplexere Funktionen integrieren möchten, können Sie Zusammensetzung verwenden, das heißt erstellen Sie die neue Funktionalität separat und nennen es von abgeleiteten Klassen

public class ComplexFunctionality 
{ 
    private readonly Control _c; 

    public ComplexFunctionality(Control c) 
    { 
     _c = c; 
    } 

    public void SettingGuid(Guid newGuid) 
    { 
     ... 
    } 
} 

public class MyTextBox : TextBox 
{ 
    private readonly ComplexFunctionality _cs = new ComplexFunctionality(this); 

    private Guid _guid; 
    public Guid Guid { 
     get { return _guid; } 
     private set { 
      _cs.SettingGuid(value); 
      _guid = value; 
     } 
    } 
}