假如在一个类中定义了虚属性或许虚要领,又在组织函数中接见了这个虚属性或要领,此时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#中在组织函数中接见虚成员有什么题目?的细致内容,更多请关注ki4网别的相干文章!