C#设置并获取快捷方式属性

时间:2018-06-19 20:58:42

标签: c# properties get set

我正在C#上观看教学视频,他们展示了一个生成该内容的快捷方式(键入“ prop”,两次按Tab)

public int Height { get; set; }

因此,他继续了使用=>代替此方法的捷径。它试图将两者结合起来,但是在长度上却出现了错误:

    class Box
{
    private int length;
    private int height;
    private int width;
    private int volume;

    public Box(int length, int height, int width)
    {
        this.length = length;
        this.height = height;
        this.width = width;
    }


    public int Length { get => length; set => length = value; } // <-error
    public int Height { get; set; }
    public int Width { get; set; }
    public int Volume { get { return Height * Width * Length; } set { volume = value; } }

    public void DisplayInfo()
    {
        Console.WriteLine("Length is {0} and height is {1} and width is {2} so the volume is {3}", length, height, width, volume = length * height * width);
    }

}

Volume可以正常工作,但是我很想知道是否可以像尝试使用Length那样缩短代码长度。

  1. 我在做什么错,可以那样做吗? 2.设置属性是否更短(我是在正确的轨道上)

1 个答案:

答案 0 :(得分:4)

您可以使用=> expression-bodied member语法作为C#6.0中只读属性的快捷方式(不能将它们与set一起使用),而在C#7.0中,它们分别是扩展为包括代码中的set访问器(也需要后备字段)。

您很有可能使用的是C#6,因此您在set语法上遇到错误。

您询问了如何缩短代码,并且由于不需要私有后备成员(您没有在setget访问器中修改值),因此删除它们的时间最短,只需将auto-implemented properties设置为用户可以设置的值。然后,您可以将=>用于Volume属性,因为它应该是只读的(因为它是一个计算字段):

我相信这是您所描述的课程的最短代码:

class Box
{
    public int Length { get; set; }
    public int Height { get; set; }
    public int Width { get; set; }
    public int Volume => Height * Width * Length;

    public Box(int length, int height, int width)
    {
        Length = length;
        Height = height;
        Width = width;
    }

    public void DisplayInfo()
    {
        Console.WriteLine("Length = {0}, Height = {1}, Width = {2}, Volume = {3}", 
            Length, Height, Width, Volume);
    }

}