2 回答
TA贡献1828条经验 获得超4个赞
这是你可以做的:
投射物体
public abstract class Parent
{
public int ParentIntField;
public void ParentMethod(Parent other)
{
if (other is Child) /// Can do: (other is Child child) to avoid manually casting
{
Child childObject = (Child)other; // We are casting the object here.
int x = childObject.ChildIntField;
//do some job with other.ChildIntField
}
//maybe do some job with other.ParentIntField
}
}
public class Child : Parent
{
public int ChildIntField;
}
但请考虑重新考虑您的设计:
但我会重新考虑你的设计,因为你在这里违反了里氏替换规则。
这是重新设计的尝试。如果您仅访问与该特定实例关联的变量,则无需将父对象传递到该方法中。如果您想访问另一个 Parent 对象,则必须将 Parent 参数添加回方法中。
public abstract class Parent
{
public int ParentIntField;
virtual public void Manipulate()
{
//maybe do some job with other.ParentIntField
}
}
public class Child : Parent
{
public int ChildIntField;
public override void Manipulate()
{
int x = ChildIntField; //do some job with ChildIntField
base.Manipulate();
}
}
TA贡献1934条经验 获得超2个赞
作为一个抽象类,您可能希望避免处理子对象实例。与前面的答案一样,尝试在子级中重写该方法,并且您可以使用“base”关键字调用基类功能。在 VS 中,当您重写时,它会自动注入该基本调用作为默认语法。
- 2 回答
- 0 关注
- 83 浏览
添加回答
举报