更改基类属性设置器行为

时间:2014-07-20 05:57:20

标签: c# inheritance properties

所以我有一个基类,它有一个属性ItemList

public class BaseClass {
    private List<Item> itemList;
    public List<Item> ItemList {
        set { 
            itemList = value; 
            LoadItems(); 
        }
    }
    public void LoadItems() { ... }
}

现在我有一个派生类,我希望在其中更改函数LoadItems()的行为。所以我这样做了:

public class DerivedClass {
    public new void LoadItems() { ... }
}    

但是当我设置属性ItemList时,只调用基础LoadItems()。无论如何我可以拨打新的LoadItems()吗?

3 个答案:

答案 0 :(得分:5)

设置您的媒体资源virtual并使用override标记派生类的实现,而不是newKnowing When to Use Override and New Keywords (C# Programming Guide)

public virtual List<Item> ItemList {
    set { 
        itemList = value; 
        LoadItems(); 
    }
}
public override List<Item> ItemList {
    set {
        // do something

        // you can also call base.ItemList
        // to get base class property implementation
    }
}

答案 1 :(得分:3)

使用此代码:

public class BaseClass {
    // ....
    public virtual void LoadItems() { ... }
}

public class DerivedClass : BaseClass {
    public override void LoadItems() { ... }
} 

答案 2 :(得分:2)

使LoadItems()虚拟并在派生类中覆盖它:

public class Base
{
   public virtual void LoadItems() { ... }
}

public class Derived : Base
{
   public override void LoadItems() { ... }
}