从父类调用方法并使用子类属性
本文关键字:子类 属性 父类 调用 方法 | 更新日期: 2023-09-27 18:30:58
实际调用:
ChildClass classCall=new ChildClass();
classCall.FullName="test name";
string returnName=classCall.GetName();
带有方法的父类:
public class BaseClass
{
public string GetName()
{
// I can request the value of the property like this.
return this.GetType().GetProperty("FullName")
.GetValue(this, null).ToString();
}
}
儿童班:
public partial class ChildClass : BaseClass
{
public string FullName;
public int Marks;
}
问题:如何避免对属性名称进行硬编码,即 GetProperty("FullName")
.我不想对属性名称进行硬编码,而是使用其他方法并在父方法中使用它?
首先,我建议避免使用公共字段 - 如果要公开状态,请使用属性。(您在反射调用中请求一个属性,但您的派生类声明了一个字段...
此时,您可以FullName
基类中创建一个抽象属性,并允许每个派生类根据需要实现它 - 但您仍然可以从基类调用它。
另一方面,如果每个派生类都必须实现它,为什么不直接将其传递给基类的构造函数呢?要么该类在没有FullName
的情况下有意义,要么没有 - 如果没有FullName
字段,您当前的代码将中断,那么为什么不将其放在基类中呢?
public class BaseClass
{
public virtual string GetName()
{
return string.Empty;
}
}
public partial class ChildClass : BaseClass
{
public string FullName;
public int Marks;
public override string GetName()
{
return FullName;
}
}
但是,如果您永远不想初始化 BaseClass 对象,则希望使其抽象并强制实现它的每个人实现其自己的 GetName 方法版本:
public abstract class BaseClass
{
public abstract string GetName();
}
BR