c#property with private setter:为什么新的[..class ..] .. {private property initializer = ...}工作?

时间:2018-04-17 21:23:10

标签: c# setter 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. 第3。 [最重要]:我如何防止这种行为,以防止代码注入pe。在字符串属性?

    感谢。

0 个答案:

没有答案