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
  • 相关阅读:
    软件工程实践个人编程作业
    实验 2:Mininet 实验——拓扑的命令脚本生成
    软工实践个人总结
    第08组 每周小结 (3/3)
    第08组 每周小结 (2/3)
    第08组 每周小结 (1/3)
    第08组 Beta冲刺 总结
    第08组 Beta冲刺 (5/5)
    第08组 Beta冲刺 (4/5)
    第08组 Beta冲刺 (3/5)
  • 原文地址:https://www.cnblogs.com/marblemm/p/7093023.html
Copyright © 2011-2022 走看看