如何在 c# wpf 中为派生类的基类设置值

本文关键字:基类 设置 派生 wpf | 更新日期: 2023-09-27 18:28:07

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 属性的总和,并将总和设置为基类的总属性,我想出来应该是这样的

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

如何在 c# wpf 中为派生类的基类设置值

如果要

引用任何继承的成员,可以只使用属性名称,如上所示。如果存在名称冲突,或者您想更清楚,您可以使用 base 关键字,如下所示:

base.Total = 15;

下面是有关基本关键字的 MSDN 文章:http://msdn.microsoft.com/en-us/library/hfw7t1ce.aspx

不过,您似乎对继承的概念有点困惑。Baseclass 的实例不会与 Derivedclass 的实例有任何关系,反之亦然,因为它们是完全独立的对象,缺少彼此的引用。继承控制类具有的成员(字段、属性和方法(,并允许派生类重用其父级中的代码,同时将其功能扩展到更具体的用例。简而言之,你的 B 和 D 对象永远不会相互通信,这首先不是继承的重点。

因此,如果没有无用的 B 对象,您的 Compute 方法应如下所示:

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

不需要为基类和派生类创建单独的实例。派生类将包含基类属性。

您的测试类应如下所示

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