我只想从所有基类派生的类列表中从基类仅调用一次方法,如何在基类中仅调用一次方法?

public class Base
{
    public virtual void foo()
    {
        Debug.WriteLine("Base foo()");
    }
}
public class A : Base
{
    public override void foo()
    {
        base.foo();
        Debug.WriteLine("A foo()");
    }
}
public class B : Base
{
    public override void foo()
    {
        base.foo();
        Debug.WriteLine("B foo()");
    }
}
class Program
{
    static void Main(string[] args)
    {
        List<Base> list = new List<Base>();
        list.Add(new A());
        list.Add(new B());
        list.Add(new A());
        foreach (Base item in list)
        {
            item.foo();
        }
    }
}


代替 :

Base foo()
A foo()
Base foo()
B foo()
Base foo()
A foo()


我想要以下结果:

Base foo()
A foo()
B foo()
A foo()

最佳答案

在底部添加一个静态标志,并调整该标志

public class Base
{
    public Base()
    {
        if (_instance == null)
            _instance = this;//record the first instance
    }
    static Base _instance;
    public virtual void foo()
    {
        if (_instance == this)
            Debug.WriteLine("Base foo()");
    }
}

关于c# - 在列表中-如何只在基数中调用一次方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42900461/

10-10 03:42