zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    }
  • 相关阅读:
    库头文件的导入导出宏
    VC 注册表读写
    改变QTableWidget 行高
    QMenu,QT的菜单添加
    error LNK2023: bad DLL or entry point 'msobj80.dll' 解决方法
    QT,QAction中的ToolTip
    QT 修改QTableWidget表头
    VS2008中 没有QT的代码智能提示
    VC 创建托盘,托盘tooltip。右键托盘菜单,点击别的地方会隐藏掉的问题。
    GDI+ 双缓冲
  • 原文地址:https://www.cnblogs.com/lwhkdash/p/3205244.html
Copyright © 2011-2022 走看看