使用属性覆盖属性

时间:2013-07-20 02:59:33

标签: c# inheritance properties attributes

假设我有3个班级(父母,儿子和女儿)。我希望Son和Daughter使用Parent的Name getter方法,但我想分别为每个子类应用不同的属性。

public class Parent {

private string name;

public string Name { 
  get { return this.name; }
  set { this.name = value != null ? value.trim() : null; }
}

}

和儿子......

public class Son : Parent { 
  [SonAttribute]
  public string Name { // keep parent behavior }
  }
}

相同的Name女儿的getter方法,但具有[Daughter]属性。

我可以这样做吗?

1 个答案:

答案 0 :(得分:4)

假设Name虚拟Parent

public class Parent 
{
    public virtual string Name 
    { 
        get { return this.name; }
        set { this.name = value != null ? value.trim() : null; }
    }
}

您可以随时执行此操作:

public class Son : Parent 
{
    [SonAttribute]
    public override string Name 
    { 
        get { return base.Name; }
        set { base.Name = value; }
    }
}

如果Name属性不是虚拟的,您将创建一个新属性,隐藏基础类型上的属性,这可能不是您想要的。有关详细信息,请参阅Knowing When to Use Override and New Keywords (C# Programming Guide)