C# свойство с приватным установщиком: почему новый [..class..] .. { private property initializer = ... } работает?

У меня есть этот пример кода:

static class Program
{
    var x = new TestClass { TestList = { "Peter", "Paul" } };

    // x.TestList is loaded with 3 string elements: "Hi there", "Peter", "Paul"
}

public class TestClass
{
    public List<string> TestList {get; private set;}

    public TestClass() 
    {
        TestList = new List<string>() { "Hi there" };
    }
}

Когда я выполняю этот код, x.TestList загружается с 3 строковыми элементами: "Hi there", "Peter", "Paul"

Вопросы

  1. Почему C# допускает такую ​​инициализацию? У меня есть частный сеттер на TestList так почему это разрешено?

  2. Почему в результате x список состоит из 3 элементов, представляющих собой объединение кода инициализации, выполняемого в конструкторе без параметров и в инициализаторе класса, используемом при создании нового TestClass объект создан? Почему бы не 1 или 2 объекта, содержащиеся в списке вместо этого?

3. [НАИБОЛЕЕ ВАЖНО]: как я могу предотвратить такое поведение, чтобы предотвратить внедрение кода pe. на свойствах строки?

Благодарю.

0 ответов

Другие вопросы по тегам