zoukankan      html  css  js  c++  java
  • 虚方法重写

    1.实例解析

    控制台程序

    class Program
        {
            static void Main(string[] args)
            {
                DerivedType derivedInstance = new DerivedType();
                 
                string line;
                while ((line = Console.ReadLine()) != null)
                { 
                    Console.WriteLine("----");
                }
            }
        }
    
        public class BadlyConstructedType
        {
            protected string initialized = "No";
    
            public BadlyConstructedType()
            {
                Console.WriteLine("Calling base ctor.");
                // Violates rule: DoNotCallOverridableMethodsInConstructors.
                DoSomething();
            }
            // This will be overridden in the derived type. 
            public virtual void DoSomething()
            {
                Console.WriteLine("Base DoSomething");
            }
        }
    
        public class DerivedType : BadlyConstructedType
        { 
    
            public DerivedType()
            {
                Console.WriteLine("Calling derived ctor.");
                initialized = "Yes";
            }
            public override void DoSomething()
            {
                Console.WriteLine("Derived DoSomething is called - initialized ? {0}", initialized);
            }
        }

    结果

    分析:

    实例化DerivedType时候,调用BadlyConstructedType时,执行的DoSomethingDerivedType重写的方法,而非父类。

    所以在使用的虚方法重写时,需要特别注意。

    2.原理描述

    百度知道:http://zhidao.baidu.com/link?url=P5NtEj7S-fzuzKSai4WynOQcRctscet2iBJxcqFYppcVqGMZjO-9ZzeB5jBZFDapguZR3sadLlGaQPHFJP_0JYh_c5Tmv8Z6Ae1mcK_Oxla

    c# 虚方法是用virtual来修饰?表明可以被重写?一般用在抽象类中?

    虚方法:
    1、virtual方法表示此方法可以被重写, 也就是说这个方法具有多态.父类中的方法是通用方法,可以在子类中重写以重新规定方法逻辑.
    2、virtual方法可以直接使用,和普通方法一样
    3、不是必须重写的. 子类可以使用base.方法 的方式调用, 无论有没有在子类使用override去重写
    virtual关键字只是明确标示此方法可以被重写, 其实它和一般的方法没有什么区别
    相应的
    sealed关键字标示此方法不可以被重写
    虚方法和抽象方法的区别:
    1.虚方法可以有实现体,抽象方法不能有实现体。
    2.抽象方法
    要求派生类必须重载这个方法;

    虚方法
    告诉编译器,这个方法可以重写。
    当基类的方法与派生类的方法重名时,
    可以选择派生类的方法从基类继承并重写,
    还是,把基类的方法隐藏起来。
    追问:
    抽象方法不能有实现体,什么意思?把基类的方法隐藏起来,如何隐藏
    追答:
    程序里没有什么方法是叫抽象方法的,那叫虚方法。

    虚方法就是子类可以覆盖基类的方法。纯虚方法,是在子类里实现的,基类不实现的。
    自己好好看看书,书上都有的,最基本的知识。


  • 相关阅读:
    自定义中间件
    haha
    博客园使用教程(皮毛)
    购物车
    计算器
    python格式化while循环
    JS弹出框、对话框、提示框,JS关闭窗口、关闭页面和JS控制页面跳转
    CentOS平台下的Docker安装与启动
    面向接口编程详解(一)——思想基础
    三目运算符详解
  • 原文地址:https://www.cnblogs.com/xcsn/p/4544041.html
Copyright © 2011-2022 走看看