Как «правильно» (идиоматическое) избежать CS9107 при передаче параметров первичного конструктора к базеC#

Место общения программистов C#
Ответить
Anonymous
 Как «правильно» (идиоматическое) избежать CS9107 при передаче параметров первичного конструктора к базе

Сообщение Anonymous »

С C# 12 мы получаем первичные конструкторы для нормальных классов. < /p>
Рассмотрим следующий код: < /p>

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

new Derived("XXX").Test();

public class Base(string name)
{
protected void Log() => Console.WriteLine("Base: " + name);
}

public class Derived(string name) : Base(name)
{
public void Test()
{
base.Log();
Console.WriteLine("Derived: " + name);
}
}
Это дает следующее предупреждение для параметра строки для полученного Первичный конструктор:

program.cs(8,42): предупреждение CS9107: параметр 'Строительное название' запечатлено в состояние типа оборудования, и его значения также прописано. Значение может быть захвачено и базовым классом. Или есть лучший способ избежать этого? Код написан неправильно? Я не уверен, что вижу альтернативу, кроме того, чтобы отказаться от основных конструкторов и переписать все это, чтобы: < /p>
new Derived("XXX").Test();

public class Base
{
protected readonly string _name;

protected Base(string name)
{
_name = name;
}

protected void Log() => Console.WriteLine("Base: " + _name);
}

public class Derived : Base
{
public Derived(string name) : base(name) { }

public void Test()
{
base.Log();
Console.WriteLine("Derived: " + base._name);
}
}
< /code>
Пожалуйста, сообщите. < /p>

Примечание.>

Подробнее здесь: https://stackoverflow.com/questions/773 ... uctor-para
Ответить

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

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

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

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

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