C#不建议在构造函数中调用虚方法或虚属性
类别:编程学习 浏览量:671
时间:2017-6-11 C#不建议在构造函数中调用虚方法或虚属性
C#不建议在构造函数中调用虚方法或虚属性Visual Studio 中安装了Resharper插件时,如果在构造函数中调用虚方法或虚属性时,编辑器会出现如下警告:
下面通过一个实例说明
1、实例代码
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; }
}
}
2、运行时, 在构造SubClass时会报空引用的错误。
3、报错原因
因为基类构造函数先于子类构造函数运行,而子类构造函数中初始化了一个成员类,但是基类构造函数访问虚成员时子类还没构造,所以出现了空引用报错。
您可能感兴趣
- python内置函数一览表(Python面向对象程序设计构造函数和析构函数用法分析)
- python继承重写构造函数(Python子类继承父类构造函数详解)
- C#不建议在构造函数中调用虚方法或虚属性
- ASP.NET私有构造函数作用
- 节日我在岗|警景相融 平安相伴(节日我在岗警景相融)
- 战 疫 时刻 致敬每一位石化大学的 守护者(战疫时刻)
- 老弄堂里的市井味道(老弄堂里的市井味道)
- 小米音乐可绑定QQ音乐, QQ音乐 真的会消失在小米的设备上吗(小米音乐可绑定QQ音乐)
- 小米Watch S1评测 或许能成为小米冲击高端可穿戴设备的里程碑(小米WatchS1评测或许能成为小米冲击高端可穿戴设备的里程碑)
- 手机QQ与小米路由器在一起 明天揭晓,敬请期待(手机QQ与小米路由器在一起)
热门推荐
- python中if语句应学会什么(Python基础之条件控制操作示例if语句)
- dockerfile映射目录(Dockerfile中ENTRYPOINT 和 CMD的区别说明)
- docker如何搭建mysql(docker容器访问宿主机的MySQL操作)
- laravel验证码依赖(laravel5.2表单验证,并显示错误信息的实例)
- mysql实现数据的备份的命令(Windows下MySQL定时备份脚本的实现)
- 工作如何分轻重缓急
- opencv怎么设置图像形态(OpenCV图像颜色反转算法详解)
- sql server语法大全(Sql Server的一些知识点定义总结)
- dedecms编辑器教程(Dedecms v5.7 编辑器默认回车键换行改为换段落的修改方法)
- python微信消息模拟请求(python实现微信机器人: 登录微信、消息接收、自动回复功能)