我需要获取对象实例的基类中的属性值,而不需要设置子类属性以从父类中检索它,可能吗?
3 回答
我认为您可能在这里误解了继承。请允许我稍微解释一下。如果您已经知道这一点,请提前道歉 - 如果是这种情况,那么您的问题可能需要一些澄清,因为这听起来像是您要问的。如果您有一个从某个基类继承的派生类,那么该派生类具有与该基类相同的所有属性。例如:
public class Square
{
public int xSize { get; set; }
}
public class Rectangle : Square
{
public int ySize { get; set; }
}
如果你声明Rectangle rect = new Rectangle()
,你可以访问rect.xSize
和rect.ySize
刚才一样。如果 xSize 是私有的,您唯一不能这样做。仅仅因为它从 Square 类中获得 xSize 并不意味着它必须从父类中获得它;它有自己的。这里的术语使用“父母”和“继承”之类的词是有原因的——如果有人说你有你父亲的眼睛,这并不意味着你真的在用他的眼睛;这意味着它们是相同的,因为您从他那里继承了它们。这里也是一样——派生类不借用父类的属性;它只是具有基类将具有的所有属性,以及您赋予它的任何额外属性。
假设您有两个如下所示的类:
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;
我知道这很旧,但是您可以执行以下操作。如果我知道其他类将依赖于常见值,比如来自重要类的会计数据,我只需将属性设为静态,然后从哪里调用它都没有关系(见下文)。否则,只需将要共享的值传递给子构造函数。
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 的方法。