knowing abstract,virtual,override,new

 

  1. If a class has at least one member which modified by "abstract",this class is an abstract class and you have to modify this class using keyword "abstract", while the member is called "abstract member"(say,abstract method or abstract property).
  2. Actual implementation is not allowed in abstract members.
  3. An abstract class can not be instantiated.
  4. When a class inherits an abstract class, it must implement all base class's abstract members(for the abstract modifier can be used with classes, methods, properties, indexers, and events).
  1. The modifier "virtual" is just simply indicate that the method can be overrided in sub classes.Beside this,a virtual member(non-static methods,properties) is as the same as usual members. 
  1. "override" is used to override base class's virtual or abstract members.
  2. "new" is used to cover base class's same-name members,but it won't override base class's anything.

example:

using System;

namespace DesignPattern
{
    public class A
    {
        public virtual void Bar()
        {
            Console.WriteLine("A.Bar");
        }

        public void Foo()
        {
            Console.WriteLine("A.Foo");
        }
        
    }

    class B:A
    {
        public override void Bar()
        {
            Console.WriteLine("B.Bar");
        }

        public new void Foo()
        {
            Console.WriteLine("B.Foo");
        }

    }



    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("----A1---");
            A A1 = new A();
            A1.Bar();//"A.Bar",for it's A.Bar
            A1.Foo();//"A.Foo",for it's A.Foo
            Console.WriteLine("---A2----");
            A A2 = new B();
            A2.Bar();//"B.Bar",for it has overrided father class's Bar
            A2.Foo();//"A.Foo".in fact i don't really know why.
            Console.WriteLine("---B1----");
            B B1 = new B();
            B1.Bar();//"B.Bar"
            B1.Foo();//"B.Foo"
            
            Console.Read();
        }
    }
}

 

 

posted on 2013-07-22 14:15  wyman25  阅读(262)  评论(0编辑  收藏  举报

导航