Использование [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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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