我需要获取对象实例的基类中的属性值,而不设置子类属性以从父级中检索它,可能吗?
答案 0 :(得分:4)
我认为你可能在这里误解了继承。请允许我解释一下。如果您已经知道这一点,请提前道歉 - 如果是这种情况,那么您的问题可能会使用一些澄清,因为这听起来像是您所要求的。如果您有一个继承自某个基类的派生类,那么该派生类具有基类所具有的所有相同属性。例如:
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并不意味着它必须从父类中获取它;它有自己的。这里的术语使用像“父母”和“继承”这样的词是有原因的 - 如果有人说你有你父亲的眼睛,那并不意味着你真的在用他的眼睛;这意味着它们是相同的,因为你从他那里继承了它们。它在这里是相同的 - 派生类不从父类借用属性;它只具有基类所具有的所有属性,以及你给它的任何额外属性。
答案 1 :(得分: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;
答案 2 :(得分:0)
我知道这很旧,但是您可以执行以下操作。如果我知道其他类将依赖于公共值,例如来自重要类的会计数据,那么我只需将属性设置为静态,然后从何处调用它就无关紧要(请参见下文)。否则,只需将要共享的值传递给子构造函数即可。
.llama
然后,您可以从静态void主程序中这样调用它:
llama
注意:您仍可以为孩子的AgePlusFive获取使用base.Age,但是您必须向Parent添加一个方法来返回Age。