Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问构造函数中实现的抽象属性会导致CA2214:不要调用构造函数中的可重写方法_C#_.net_Inheritance_Virtual_Code Analysis - Fatal编程技术网

C# 访问构造函数中实现的抽象属性会导致CA2214:不要调用构造函数中的可重写方法

C# 访问构造函数中实现的抽象属性会导致CA2214:不要调用构造函数中的可重写方法,c#,.net,inheritance,virtual,code-analysis,C#,.net,Inheritance,Virtual,Code Analysis,构造函数MyClass()导致CA2214: 不要在构造函数中调用可重写的方法 这通常仅在调用与构造函数在同一类中定义的虚拟方法时显示。e、 g.在MyBase的构造函数中访问MyProperty。这里我调用派生类构造函数中继承的抽象属性的非虚拟重写实现。不,它仍然是虚拟的,因为override不会隐式密封成员。(尝试:从MyClass派生另一个类,您可以再次重写MyProperty。) 但您可以明确地将其密封: public abstract class MyBase { public

构造函数MyClass()导致CA2214:

不要在构造函数中调用可重写的方法


这通常仅在调用与构造函数在同一类中定义的虚拟方法时显示。e、 g.在
MyBase
的构造函数中访问
MyProperty
。这里我调用派生类构造函数中继承的抽象属性的非虚拟重写实现。

不,它仍然是虚拟的,因为
override
不会隐式密封成员。(尝试:从
MyClass
派生另一个类,您可以再次重写
MyProperty
。)

但您可以明确地将其密封:

public abstract class MyBase
{
    public abstract bool MyProperty
    {
        get;
        protected set;
    }
}

public class MyClass : MyBase
{
    public MyClass()
    {
        this.MyProperty = true;
    }

    public override bool MyProperty
    {
        get;
        protected set;
    }
}

此时,我希望警告消失。

我认为所有内容都必须显式声明为虚拟,包括覆盖的成员。@Kurian:不。事实上,不能用同一方法同时指定
覆盖
虚拟
public override sealed bool MyProperty
{
    get;
    protected set;
}