2016-05-22 13 views
0

我有一塊這樣的代碼。如何使用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; } 
    } 

但是我也有其他項目,如Button類,CheckBox類等。如何避免代碼每次重複執行Guid屬性和代。

+0

爲什麼你需要GUID? – jdweng

+0

創建一個具有Guid屬性並繼承該類的類? – Bauss

+1

您可以學習WinForms控件層次結構以及如何使用繼承。但顯然,如果你在GUI環境中運行,你應該小心不要與使用命名空間的現有對象發生衝突。 –

回答

1

調用它可以創建一個baseclass,將實例基於結構Guid。每個控件都只是從基地繼承而來。

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(); 
    } 
} 

雖然,如果guid的目的是有一個唯一的標識符,我會建議只是獲取實例的散列。

例子:

var textBoxId = MyTextBox.GetHashCode(); 

注:由於@Maarteen提到,GetHashCode的不保證唯一性。每個文檔:

GetHashCode方法的默認實現不是 保證不同對象的唯一返回值。此外,.NET Framework不保證 GetHashCode方法的默認實現,並且它返回的值將在 不同版本的.NET Framework之間相同。因此,不得將此方法的默認實現用作散列目的的唯一對象 標識符。

+0

謝謝你answer.may不適合在這裏問,但如果你指出我會很高興。我想生成這個類的html代碼。有一些方式,這種混亂的方式,但我怎麼能做到最approprite的方式。謝謝 – stackada

+0

你使用WPF還是WinForms? –

+0

web基礎應用程序。我只是想生成html form.so,我創建了一個類庫,並將其包含在mvc應用程序中。 – stackada

0

如果你想擴展現有的控制,你必須繼承這個控制

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

你將不得不重複這對於每一個控制,因爲你不能改變現有的控制。如果你想從頭開始創建你的繼承層次結構(這對於控件來說是不可能的),你只需要在基類中添加這些屬性並從中派生其他類。

如果要集成更復雜的功能,你可以使用組合物,即分別創建新的功能和派生類

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; 
     } 
    } 
} 
相關問題