首页后端开发ASP.NETC#中在构造函数中访问虚成员有什么问题?

C#中在构造函数中访问虚成员有什么问题?

时间2024-01-30 05:33:03发布访客分类ASP.NET浏览384
导读:收集整理的这篇文章主要介绍了C#中在构造函数中访问虚成员有什么问题?,觉得挺不错的,现在分享给大家,也给大家做个参考。如果在一个类中定义了虚属性或者虚方法,又在构造函数中访问了这个虚属性或方法,此时VisualStudio是不会给出警告,并...
收集整理的这篇文章主要介绍了C#中在构造函数中访问虚成员有什么问题?,觉得挺不错的,现在分享给大家,也给大家做个参考。

如果在一个类中定义了虚属性或者虚方法,又在构造函数中访问了这个虚属性或方法,此时VisualStudio是不会给出警告,并且编译也没有问题,但是如果安装了ResharPEr插件则会给出警告提示:“在构造函数中访问了虚成员”,那么,这为何是一个安全隐患,下面给出一个例子说明:

using System;
namespace VirtualDemo{
    class PRogram    {
        static void Main(string[] args)        {
                VAR test = new SubClass();
                Console.ReadKey();
        }
    }
    class BaseClass    {
        protected virtual string VirtualProperty {
     get;
     set;
 }
        public BaseClass()        {
                var p = VirtualProperty;
                VirtualMethod();
        }
        protected virtual void VirtualMethod()        {
        }
    }
    class SubClass : BaseClass    {
            private MockClass _mockClass;
        public SubClass()        {
                _mockClass = new MockClass();
        }
        protected override string VirtualProperty        {
            get {
     return _mockClass.MockProperty;
 }
            set {
     _mockClass.MockProperty = value;
 }
        }
        protected override void VirtualMethod()        {
                var p = _mockClass.MockProperty;
        }
    }
    class MockClass    {
        public string MockProperty {
     get;
     set;
 }
    }
}
    

该示例很简单,在构造SubClass时出现了空引用报错,因为基类构造函数先于子类构造函数运行,而子类构造函数中初始化了一个成员类,但是基类构造函数访问虚成员时子类还没构造,所以出现了空引用报错。有多种方式可以避免这一情况,可以通过子类字段初始化的方式来构造成员类,这个语法糖可避免构造函数的时序问题,第二个是可定义一个虚的InITialize方法在子类构造函数第一步调用,子类在继承这个方法时初始化需要的依赖。

以上就是C#中在构造函数中访问虚成员有什么问题?的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

.netcsharp函数推荐构造访问

若转载请注明出处: C#中在构造函数中访问虚成员有什么问题?
本文地址: https://pptw.com/jishu/592105.html
分享html元素调用服务器实例 一文讲解ajax实现无刷新上传和下载(代码详解)

游客 回复需填写必要信息