怎么声明一个方法 子类不能继承 但是外部可以访问
还有不能事static方法

解决方案 »

  1.   

    把这个方法声明在一个sealed的类里面,没有子类,就没有任何子类能继承了,呵呵
      

  2.   

    你不加virtual,子类就无法重写,只能覆盖。
      

  3.   

    给你看段代码就知道了,你需要学习一下基本的OOP编程的知识。对于一个子类对象,如果是重写虚函数,不管你是通过子类还是基类的形式去调,调的都是被重写的子类方法。而对于一个覆盖(Shadow)的函数,如果是通过父类调用的话,那么调用的就是父类函数,通过子类形式调,就是子类方法。    class A
        {
          public virtual void f1()
          {
              Console.WriteLine("A.f1 is called!");
          }     public void f2()
          {
              Console.WriteLine("A.f2 is called!");
          }    }
        class B:A
        {
           public override void f1()
          {
              Console.WriteLine("B.f1 is called!");
          }        public new void f2()
          {
              Console.WriteLine("B.f2 is called!");
          }
        }
            class Program
        {
            static void Main(string[] args)
            {
                A a = new B();            a.f1();
                a.f2();            Console.ReadKey();
            }
    }==========输出结果B.f1 is called!
    A.f2 is called!
      

  4.   

    一定是可以重写或者覆盖的,除非是私有函数,但是私有函数无法被外部调用,显然是无法达到的。
    所以你这个要求无法达到。一般来说,不加virtual就可以了,很少有人用new来屏蔽父类的函数,除非那个人知道这么做的后果。并且,屏蔽父类的函数并不会导致父类的行为异常,所以一般也不会出什么乱子。
      

  5.   

    申明成private,,外部调用的全局函数或者类用friend修饰.
    我一般这样解决