簡體   English   中英

如何在c#wpf中從派生類設置基類的值

[英]How to set value for a base class from derived class in c# wpf

public class Baseclass
{
    private int mTotal = 0;
    private int mID = 0;

    public int Total
    {
        get { return mTotal; }
        set { mTotal = value;}
    }
    public int ID
    {
        get { return mID; }
        set { mID = value;}
    }
}

public class Derivedclass : Baseclass
{
    private int mX = 0;
    private int mY = 0;

    public int X
    {
        get { return mX; }
        set 
        {
            mX = value;
            Total = Total + mX;
        }
    }
    public int Y
    {
        get { return mY; }
        set 
        {
            mY = value;
            Total = Total + mY;
        }
    }

}

public partial class  Test : Page
{
    Baseclass B = new Baseclass();
    Derivedclass D = new Derivedclass();
    public Test()
    {
        Calculate();
    }     

    public void Calculate()
    {

        for(int i =1; i <5 ;i++)
        {
            B.ID = i;
            for (int j = 0; j < 5; j++)
            {
                D.X = j;
                D.Y = j;
            }
            MessageBox.Show("ID " + B.ID + " Total Sum" + B.Total);
            B.Total = 0;
        }
    }
    // Out put should be 
    // ID 1 Total Sum 16
    // ID 2 Total Sum 16
    // ID 3 Total Sum 16
    // ID 4 Total Sum 16
}

這里我有兩個類,Baseclass和derivedclass。 我想找出派生類中x和y屬性的總和,並將總和設置為基類的Total屬性而我想要的應該是這樣的

// ID 1 Total Sum 16
// ID 2 Total Sum 16
// ID 3 Total Sum 16

如果要引用任何繼承的成員,您可以只使用屬性名稱,如上所示。 如果存在名稱沖突,或者您希望更清楚,可以使用base關鍵字,如下所示:

base.Total = 15;

這是關於base關鍵字的MSDN文章: http//msdn.microsoft.com/en-us/library/hfw7t1ce.aspx

不過,看起來你對繼承的想法有點困惑。 Baseclass的實例與Derivedclass的實例沒有任何關系,反之亦然,因為它們是完全獨立的對象,彼此缺少引用。 繼承控制類具有的成員(字段,屬性和方法),並允許派生類重用其父代碼,同時將其功能擴展到更具體的用例。 簡而言之,你的B和D對象永遠不會彼此交談,而這首先不是繼承的重點。

因此,如果沒有無用的B對象,您的Calculate方法應如下所示:

public void Calculate()
{
    for(int i = 1; i < 5; i++)
    {
        D.ID = i;
        for (int j = 0; j < 5; j++)
        {
            D.X = j;
            D.Y = j;
        }
        MessageBox.Show("ID " + D.ID + " Total Sum" + D.Total);
        D.Total = 0;
    }
}

此版本的Calculate()將顯示以下內容:

ID 1 Total Sum 20
ID 2 Total Sum 20
ID 3 Total Sum 20
ID 4 Total Sum 20

您不需要為基類和派生類創建單獨的實例。 派生類中將包含基類屬性。

您的Test類應如下所示

public partial class  Test : Page
{
    Derivedclass D = new Derivedclass();
    public Test()
    {
        Calculate();
    }     

    public void Calculate()
    {

        for(int i =1; i <5 ;i++)
        {
            D.ID = i;
            for (int j = 0; j < 5; j++)
            {
                D.X = j;
                D.Y = j;
            }
            MessageBox.Show("ID " + D.ID + " Total Sum" + D.Total);
            D.Total = 0;
        }
    }
    // Out put should be 
    // ID 1 Total Sum 16
    // ID 2 Total Sum 16
    // ID 3 Total Sum 16
    // ID 4 Total Sum 16
}

你的基類可以有一個虛方法。 而不是財產

class Baseclass
{

public virtual int GetTotal(){return 0;} // or throw new NotImplementedException();
}


public class Derivedclass:Baseclass
{
    int x = 2;
    int y = 3;

    public override int GetTotal()
    {
        return x + y; 
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM