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();
            }
        }
    }
  • 相关阅读:
    Oracle11gR2下PL/SQL访问网络的错误ORA24247
    安装cx_Oracle
    搭建基于FreeNAS的共享存储
    unique constraint 和 unique index 的关系
    Oracle11gR2_RAC全静默安装攻略
    struts中的constant详解 (转载)
    网摘
    用 Google 的 FaceNet 做人脸识别极客帮课程笔记
    【Linux】Git 安装最新版
    【Jmeter】性能测试EMQ X 压测
  • 原文地址:https://www.cnblogs.com/lwhkdash/p/3205244.html
Copyright © 2011-2022 走看看