2012-07-24 76 views
0

部分類我有這個類的父類:如何繼承存儲過程調用

public partial class GetStuffResult 
{ 

    private int _Id; 

    private string _Name; 

    public GetStuffResult() 
    { 
    } 

    [Column(Storage="_Id", DbType="INT NOT NULL")] 
    public int Id 
    { 
     get 
     { 
      return this._Id; 
     } 
     set 
     { 
      if ((this._Id != value)) 
      { 
       this._Id = value; 
      } 
     } 
    } 

    [Column(Storage="_Name", DbType="NVarChar(100)")] 
    public string Name 
    { 
     get 
     { 
      return this._Name; 
     } 
     set 
     { 
      if ((this._Name != value)) 
      { 
       this._Name = value; 
      } 
     } 
    } 
} 

這是有一個額外的方法的異常相同方法的基類:

public partial class GetStuffResult1 
{ 
    private int _Score; 

    private int _Id; 

    private string _Name; 

    public GetStuffResult1() 
    { 
    } 

    [Column(Storage="_Score", DbType="INT NOT NULL")] 
    public int Id 
    { 
     get 
     { 
      return this._Score; 
     } 
     set 
     { 
      if ((this._Score != value)) 
      { 
       this._Score = value; 
      } 
     } 
    } 

    [Column(Storage="_Id", DbType="INT NOT NULL")] 
    public int Id 
    { 
     get 
     { 
      return this._Id; 
     } 
     set 
     { 
      if ((this._Id != value)) 
      { 
       this._Id = value; 
      } 
     } 
    } 

    [Column(Storage="_Name", DbType="NVarChar(100)")] 
    public string Name 
    { 
     get 
     { 
      return this._Name; 
     } 
     set 
     { 
      if ((this._Name != value)) 
      { 
       this._Name = value; 
      } 
     } 
    } 
} 

我之前做過繼承,但我完全困惑它將如何在這種情況下工作?我如何繼承GetStuffResult,以便我可以使用它的兩個方法,而不必在GetStuffResult1中將相同的代碼粘貼兩次。 如果有人可以舉例說明代碼,我將會很感激,因爲我是.NET 3.5的新手,並且仍然在努力學習它。

回答

1

我不知道我是否正確理解你的問題。 (您當前的GetStuffResult1代碼不應該編譯你有兩次定義Id屬性。)如果你正在尋找從GetStuffResult繼承那麼這會做(見Inheritance):

public partial class GetStuffResult1 : GetStuffResult 
    { 
     private int _Score; 

     public GetStuffResult1() 
     { 
     } 

     [Column(Storage = "_Score", DbType = "INT NOT NULL")] 
     public int Id 
     { 
      get 
      { 
       return this._Score; 
      } 
      set 
      { 
       if ((this._Score != value)) 
       { 
        this._Score = value; 
       } 
      } 
     } 


    } 

注意,我已刪除來自子類的_Id_Name。然而,這會給你警告:

GetStuffResult1.Id」隱藏繼承成員 'ThreadConsoleApp.GetStuffResult.Id'。如果想要隱藏 ,請使用新關鍵字。

如果您對使用部分類感到困惑,並且您可能需要多個源文件中的單個類,那麼我正在考慮您的問題的第二件事。在這種情況下,您可以使用partial關鍵字。如果是這種情況,你不需要繼承,那麼你需要爲這個類使用一個單一的名稱。例如GetStuffResult。在這種特殊情況下你GetStuffResult1將變爲:

public partial class GetStuffResult 
    { 
     private int _Score; 

     public GetStuffResult1() 
     { 
     } 

     [Column(Storage = "_Score", DbType = "INT NOT NULL")] 
     public int Id 
     { 
      get 
      { 
       return this._Score; 
      } 
      set 
      { 
       if ((this._Score != value)) 
       { 
        this._Score = value; 
       } 
      } 
     } 


    } 

這將是與具有與所有的組合性質的單一類。

編輯:

要訪問子類的基類的屬性,你可以使用base關鍵字。

base.Id = 0; 
    base.Name = "SomeName"; 

要訪問GetStuffResult1對象中的基類屬性,請參閱以下示例。

GetStuffResult1 gsr1 = new GetStuffResult1(); 
    gsr1.Id = 0; 
    gsr1.Name = "SomeName"; 

這裏gsr1.Name是從基類,您可以在鹼或子類Id使用不同的名稱,以便它可以更清晰。

+0

非常感謝回答,我還有一個問題。因此,在子類中,我們將刪除_Id和_Name。我怎麼稱呼這些? – NoviceMe 2012-07-25 03:55:46

+0

@NoviceMe,檢查編輯答案 – Habib 2012-07-25 04:02:01

+0

非常感謝。我認爲這有幫助,我在相同的條件下思考,但這是一個linq查詢,我從來沒有使用過,它是完全拋棄我。讓我試試這個。再次感謝一噸! – NoviceMe 2012-07-25 04:07:22