Использование [MemberNotNull] в виртуальном переопределении, которое вызывается в конструкторе BaseClass.C#

Место общения программистов C#
Anonymous
Использование [MemberNotNull] в виртуальном переопределении, которое вызывается в конструкторе BaseClass.

Сообщение Anonymous »

У меня есть следующий код. Попробуйте здесь

Код: Выделить всё

using System;
using System.Diagnostics.CodeAnalysis;

public class Base{
protected Base(){
Initialize();
}

protected virtual void Initialize(){}
}

public class Derived : Base{
public string _someString;

public Derived() : base(){
}

[MemberNotNull(nameof(_someString))]
protected override void Initialize(){
_someString = "Test";
}
}

public class Program
{
public static void Main()
{
Console.WriteLine("Hello World");
}
}
Я все еще получаю предупреждение

/home/Program.cs(16,9): предупреждение CS8618 : Ненулевое поле «_someString» должно содержать ненулевое значение при выходе из конструктора. Рассмотрите возможность объявления поля как допускающего значение NULL. [/home/home.csproj]

Теперь очевидно, что это поле будет полностью инициализировано. Однако компилятор этого не осознает. Есть ли способ объяснить это?
Мотивацией этого является то, что Derived — это сгенерированный частичный класс. Я хочу, чтобы дополнительные члены автоматически инициализировались. Если я просто вызову «Initialize()» непосредственно в конструкторе Derived, предупреждения исчезнут, но я хочу избежать этого шага.

Подробнее здесь: https://stackoverflow.com/questions/790 ... s-construc

Вернуться в «C#»