zoukankan      html  css  js  c++  java
  • 不要在构造函数中调用可重写的方法

    非密封类型的构造函数调用其类中定义的虚方法。

    调用虚方法时,直到运行时之前都不会选择执行该方法的实际类型。构造函数调用虚方法时,可能尚未执行调用该方法的实例的构造函数。

    要修复与该规则的冲突,请不要从某类型的构造函数中调用该类型的虚方法。

    不要禁止显示此规则发出的警告。应重新设计该构造函数,以取消对虚方法的调用。

    下面的示例演示与该规则冲突产生的影响。测试应用程序创建 DerivedType 的实例,使其基类 (BadlyConstructedType) 构造函数开始执行。BadlyConstructedType 的构造函数错误地调用虚方法 DoSomething。如输出所示,DerivedType.DoSomething() 将执行,并且是在DerivedType 的构造函数执行前开始执行。

    using System;
    
    namespace UsageLibrary
    {
        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);
            }
        }
    
        public class TestBadlyConstructedType
        {
            public static void Main()
            {
                DerivedType derivedInstance = new DerivedType();
            }
        }
    }
    

    该示例产生下面的输出。

    Calling base ctor.
    Derived DoSomething is called - initialized ? No
    Calling derived ctor.

    参考:https://msdn.microsoft.com/zh-cn/library/ms182331(VS.90).aspx
  • 相关阅读:
    Linux 命令汇总总结相关
    数据结构---python---表
    python-----Queue模块
    再看python多线程------threading模块
    <转> Struct 和 Union区别 以及 对内存对齐方式的说明
    python装饰器
    HTTP权威指南----缓存
    HTTP权威指南----连接管理
    以python理解Linux的IO多路复用,select、poll、epoll
    <转载> pycharm快捷键及一些常用设置
  • 原文地址:https://www.cnblogs.com/marblemm/p/7093023.html
Copyright © 2011-2022 走看看