2

我需要获取对象实例的基类中的属性值,而不需要设置子类属性以从父类中检索它,可能吗?

在此处输入图像描述

4

3 回答 3

6

我认为您可能在这里误解了继承。请允许我稍微解释一下。如果您已经知道这一点,请提前道歉 - 如果是这种情况,那么您的问题可能需要一些澄清,因为这听起来像是您要问的。如果您有一个从某个基类继承的派生类,那么该派生类具有与该基类相同的所有属性。例如:

public class Square
{
    public int xSize { get; set; }
}

public class Rectangle : Square
{
    public int ySize { get; set; }
}

如果你声明Rectangle rect = new Rectangle(),你可以访问rect.xSizerect.ySize刚才一样。如果 xSize 是私有的,您唯一不能这样做。仅仅因为它从 Square 类中获得 xSize 并不意味着它必须从父类中获得它;它有自己的。这里的术语使用“父母”和“继承”之类的词是有原因的——如果有人说你有你父亲的眼睛,这并不意味着你真的在用他的眼睛;这意味着它们是相同的,因为您从他那里继承了它们。这里也是一样——派生类不借用父类的属性;它只是具有基类将具有的所有属性,以及您赋予它的任何额外属性。

于 2013-01-21T16:31:55.357 回答
2

假设您有两个如下所示的类:

public class Parent 
{ 
  public int Age { get; set; }
}

public class Child : Parent 
{
  // This will get the 'base' class property
  public int AgePlusFive { get { return base.Age + 5; } }
}

...稍后在其他地方你想从 Child 类中获取 Age 属性,所以你说:

Child child = new Child();
int age = child.Age;
int agePlusFive = child.AgePlusFive;
于 2013-01-21T16:16:47.330 回答
0

我知道这很旧,但是您可以执行以下操作。如果我知道其他类将依赖于常见值,比如来自重要类的会计数据,我只需将属性设为静态,然后从哪里调用它都没有关系(见下文)。否则,只需将要共享的值传递给子构造函数。

public class Parent
{
    public static int Age { get; set; }
    public void SetAge(int age)
    {
        Age = age;
    }
}

public class Child : Parent
{
    public int AgePlusFive { get { return Parent.Age + 5; } }
    public void ShowProperty()
    {
        MessageBox.Show(AgePlusFive.ToString());
    }
}
}

然后你可以从你的静态 void main 中这样调用它:

 Parent parent = new Parent();
 parent.SetAge(3);
 Child child = new Child();
 child.ShowProperty();

注意:您仍然可以使用 base.Age 为您的孩子 AgePlusFive 获取,但您必须向 Parent 添加一个返回 Age 的方法。

于 2020-12-09T04:22:59.073 回答