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

时间:2014-11-19 17:30:45

标签: c# oop c#-4.0

实际通话:

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")。我不想硬编码属性名称,而是使用其他方法并在父方法中使用它?

2 个答案:

答案 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