实际通话:
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")
。我不想硬编码属性名称,而是使用其他方法并在父方法中使用它?
答案 0 :(得分:6)
首先,我建议避免使用公共字段 - 如果要将状态公开,请使用属性。 (你是在你的反射调用中询问一个属性,但你的派生类声明了一个字段...)
此时,您可以在基类中创建FullName
抽象属性,并允许每个派生类实现它们所需的 - 但您仍然可以从中调用它基类。
另一方面,如果每个派生类都必须实现它,为什么不将它传递给基类的构造函数呢?如果不是 FullName
字段,那么在没有FullName
的情况下该类是有意义的还是没有 - 您当前的代码将会中断,那么为什么不在基类开始?
答案 1 :(得分:-1)
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