2013-10-23 66 views
-1

我是C#的新手,並嘗試使用它。繼承來自子類的超類屬性

我有一個超級Form與屬性FormIDForm由其他4個子類繼承。

Form-> DeployForm -> SystemOut and Form_> Colection -> SystemIn

如何從子類訪問屬性FormID? (DeployFormSystemOutColectionCollectiomSystemIn?)

// Superclass - Form. 
public class Form 
{ 
    private int _FormID; 
    private string _UserName; 
    private string _ComputerName; 
    private string _AssetTag; 
    private string _Department; 
    private string _Status; 

    // Below are the associations I linked 
    // to other classes that don't require attribute FormID. 
    private FormCategory _differentiateBy; 
    private CheckList _referencesToChecklist; 
    private Staff _referencesToStaff; 

    public Form() 
    { 
     _differentiateBy = new FormCategory(); 
     _referencesToChecklist = new CheckList(); 
     _referencesToStaff = new Staff(); 
    } 

    public int FormID 
    { 
     get { return _FormID; } 
     set { _FormID = value; } 
    } 
} 

// Sub Class - DeploymentForm 
public class DeploymentForm : Form 
{ 
    private DateTime _DeployDate; 
    private int _DeployBy; 
    private DateTime _SetupDate; 
    private int _SetupBy; 

    public DeploymentForm() 
    { 
    } 

    public DateTime DeployDate 
    { 
     get { return _DeployDate; } 
     set { _DeployDate = value; } 
    } 

    public int DeployBy 
    { 
    get { return _DeployBy; } 
    set { _DeployBy = value; } 
    } 

    public DateTime SetupDate 
    { 
     get { return _SetupDate; } 
     set { _SetupDate = value; } 
    } 

    public int SetupBy 
    { 
     get { return _SetupBy; } 
     set { _SetupBy = value; } 
    } 
} 

// etc... 
+0

僅在派生類中使用'this.FormID'或'base.FormID'。 –

+0

由於你是新人,我冒昧地讓你的問題可讀。這將更有可能做出很好的回答。如果我明確地改變了意思,我很抱歉。請編輯避免含糊不清的問題。 – Jodrell

+0

謝謝@Jorell,謝謝你幫我重述這個問題。 – AlphaRomeo69

回答

0

由於FormID屬性具有public範圍,因此它將在子類中可訪問,就好像它是普通成員一樣。說做就做,

this.FormID 

編輯爲響應OP的評論。

如果子類中的構造函數是public默認(無參數)並且是空的,就像你的那樣,那麼它是多餘的。空的public默認構造函數可以並且應該被刪除。

如果你想做一個public默認的構造函數來做某件事,那就去做吧。基類中的默認構造函數(如果存在)將在您實例化子類時調用。

如果基類沒有可訪問的默認構造函數,或者您想用某些參數調用非默認構造函數,則可以在您的子類構造函數定義中指定調用。例如

public class BaseClass 
{ 
    protected BaseClass(int p) 
    { 
    } 
} 

public class SubClass : BaseClass 
{ 
    public SubClass() 
     : base(int.MinValue) 
    { 
    } 

    public SubClass(int p) 
     : base(p) 
    { 
    } 
} 

Rememeber,如果一個類沒有構造函數中,public默認的空構造是不言而喻的。如果指定了任何構造函數,則含義將被刪除。

+0

@jodrell 我需要做任何事情在deploymentForm類的構造函數?我是否正確地做到這一點? //在deploymentForm類中聲明一個屬性來保存來自Form類的「formID」? private Form _FormID; 公共表FormID { 獲得{} 集合{}} @ – AlphaRomeo69

+0

AlphaRomeo69,看到我的編輯,它的一個單獨的問題真的。 – Jodrell

+0

@Jorell非常感謝你向我解釋,我很抱歉,我在這裏發佈我的第二個問題。 – AlphaRomeo69

0

你剛纔引用它像任何其他財產:

DeploymentForm deploymentForm = new DeploymentForm(); 
var x = deploymentForm.FormID; 
+0

嗨@chrisP,我需要做什麼關於deploymentForm類中的構造函數嗎? 我正確地做到這一點嗎? //在deploymentForm類中聲明一個屬性來保存來自Form類的「formID」? private Form _FormID; 公共表FormID { 獲得{} 集合{}} 喜 – AlphaRomeo69

0

你並不需要什麼特別的東西:

public class DeployForm : Form 
{ 
    public void DoStuff() 
    { 
     System.Console.WriteLine("{0}", FormID); 
    } 
} 

作爲除此之外,您想了解C#中的自動屬性 ​​- 不需要爲每個屬性都有明確的後臺字段。