用属性替代属性

本文关键字:属性 | 更新日期: 2023-09-27 18:23:56

假设我有三个班(父母、儿子和女儿)。我希望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]属性。

我能做这个吗?

用属性替代属性

假设NameParent:上是虚拟的

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属性不是虚拟的,您将创建一个新的属性,会隐藏基本类型上的属性,这可能不是您想要的。有关详细信息,请参阅"知道何时使用覆盖和新关键字"(C#编程指南)。