Код: Выделить всё
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
Мобильная версия