C#获取和设置,速记和访问控制

时间:2014-10-17 15:32:29

标签: c#

class Program
{
    class Ad
    {
        public string _name { private get; set; }
    }

    public static void Main()
    {
        Ad ad = new Ad();
        Console.WriteLine(ad._name = "Name");
    }

}

代码输出:"名称" ,但_name字段获取是私有的。为什么我没有收到错误?

2 个答案:

答案 0 :(得分:0)

我知道你在做什么。我想你的代码是这样的:

    class Program
{
    class Ad
    {

        public string _name { private get; set; }


    }

    public static void Main()
    {
        Ad ad = new Ad();
        Console.WriteLine(ad._name = "Name");
        Console.ReadLine();
    }

}

当然它会起作用,因为你实际上并没有调用ad._name的获取。

试试这个,你会看到:

    class Program
{
    class Ad
    {

        public string _name { private get; set; }


    }

    public static void Main()
    {
        Ad ad = new Ad();
        ad._name = "Name";
        Console.WriteLine(ad._name);
        Console.ReadLine();
    }

}

您将收到以下错误:“错误1属性或索引器'ConsoleApplication7.Program.Ad._name'无法在此上下文中使用,因为get访问器无法访问...”

答案 1 :(得分:0)

  

为什么我没有收到错误?

因为您正在编写分配结果。代码string result = ad._name = "Name"会将ad._name = "Name"的结果存储在result变量中,即“名称”。

所以你没有像@Jon addresses那样调用getter。

请参阅7.13.1 Simple assignment

  

简单赋值表达式的结果是赋给左操作数的值。结果与左操作数的类型相同,并且始终归类为值。