代码如下:
class Program
    {
        static void Main(string[] args)
        {
             
            DerivedFromBad b = new DerivedFromBad();
            b.doSomething();
            System.Console.ReadKey();
            // Outputs: ABC is less than abc
        }
     
    }
    public class BadBaseClass
    {
        
        public void doSomething()
        {
            this.SetState();
        }
        public virtual void SetState()
        {
            Console.WriteLine("BadBaseClass");        }
    }    public class DerivedFromBad : BadBaseClass
    {
        public override void SetState()
        {
            Console.WriteLine("DerivedFromBad ");
        }    }结果显示: DerivedFromBad如果我想在 BadBaseClass.doSomething方法调用 自身的 SetState()方法要怎么办。
也就是结果要为:BadBaseClass

解决方案 »

  1.   

     class Program
        {
            static void Main(string[] args)
            {            //DerivedFromBad b = new DerivedFromBad(); 
                BadBaseClass b = new BadBaseClass();
                b.doSomething();
                System.Console.ReadKey();
                
            }    }
        public class BadBaseClass
        {        public void doSomething()
            {
                this.SetState();
            }
            public virtual void SetState()
            {
                Console.WriteLine("BadBaseClass");        }
        }    public class DerivedFromBad : BadBaseClass
        {
            public override void SetState()
            {
                Console.WriteLine("DerivedFromBad ");
            }    } 
      

  2.   

    那就不能用virtual 和override 
    好像要用new来覆盖
      

  3.   

    or...
      class Program
        {
            static void Main(string[] args)
            {            
                BadBaseClass b = new DerivedFromBad();
                b.doSomething();
                System.Console.ReadKey();
                
            }    }
        public class BadBaseClass
        {        public void doSomething()
            {
                this.SetState();
            }
            public  void SetState()
            {
                Console.WriteLine("BadBaseClass");        }
        }    public class DerivedFromBad : BadBaseClass
        {
            public new void SetState()
            {
                Console.WriteLine("DerivedFromBad ");
            }    } 
      

  4.   

        using System;    class Program 
        { 
            static void Main(string[] args) 
            { 
                
                DerivedFromBad b = new DerivedFromBad(); 
                b.doSomething(); 
                System.Console.ReadKey(); 
            } 
        
        }     public class BadBaseClass 
        { 
            public void doSomething() 
            { 
                this.SetState(); 
            }         public virtual void SetState() 
            { 
                Console.WriteLine("BadBaseClass"); 
            } 
        }     public class DerivedFromBad : BadBaseClass 
        { 
            public new void SetState() 
            { 
                Console.WriteLine("DerivedFromBad "); 
            } 
        } 
      

  5.   

    or...
     class Program
        {
            static void Main(string[] args)
            {
                DerivedFromBad b = new DerivedFromBad();
                b.doSomething();
                System.Console.ReadKey();
                
            }    }
        public class BadBaseClass
        {        public void doSomething()
            {
                this.SetState();
            }
            public  void SetState()
            {
                Console.WriteLine("BadBaseClass");        }
        }    public class DerivedFromBad : BadBaseClass
        {
            public new  void SetState()
            {
                Console.WriteLine("DerivedFromBad ");
            }    }    // 输出:BadBaseClass
      

  6.   

    如果是vb.net的话,可以用
    public sub doSomething()
    MyClass.SetState()
    end sub
    (给个很绕口的名字:虚方法的非虚调用)
      

  7.   

    or...
    class Program
        {
            static void Main(string[] args)
            {
                DerivedFromBad b = new DerivedFromBad();
                b.doSomething();
                System.Console.ReadKey();
                
            }    }
        public class BadBaseClass
        {        public void doSomething()
            {
                this.SetState();
            }
            public  virtual void SetState()
            {
                Console.WriteLine("BadBaseClass");        }
        }    public class DerivedFromBad : BadBaseClass
        {
            public new  void SetState()
            {
                Console.WriteLine("DerivedFromBad ");
            }    }    // 输出:BadBaseClass
      

  8.   

    楼上的通过new改的话,子类的dosomething就不能调用子类自身的SetState