从父类调用方法并使用子类属性

本文关键字:子类 属性 父类 调用 方法 | 更新日期: 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