只读和私有方法的问题

本文关键字:问题 有方法 只读 | 更新日期: 2023-09-27 18:34:16

>"创建一个名为"DemoSquare"的程序,该程序启动一个由 10 个 Square 对象组成的数组,这些对象的边值为 1 -10,并显示每个正方形的值。Square 类包含面积和边长度的字段,以及需要面积和边长度参数的构造函数。构造函数将其参数分配给正方形边的长度,并调用计算面积字段的私有方法。还包括只读属性以获取正方形的侧面和区域。

现在我认为这是一个棘手的问题,因为由于只读分配,我无法获得私有方法来计算面积,但这是我的代码:

    class demoSquares
    {
        static void Main(string[] args)
        {
            Square[] squares = new Square[10];//Declares the array of the object type squares
            for (int i = 0; i < 10; i++)
            {
                //Console.WriteLine("Enter the length");
                //double temp = Convert.ToDouble(Console.ReadLine());
                squares[i] = new Square(i+1);//Initializes the objects in the array 
            }
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(squares[i]);
            }//end for loop, prints the squares
        }//end main
      }//end class

这是方形类:

   public class Square
   {
    readonly double length;
    readonly double area;
    public Square(double lengths)//Constructor 
    {
       length = lengths;
       area = computeArea();
    }
    private double computeArea()//getmethod 
    {
        double areaCalc = length * length;
        return areaCalc;
    }
}

只读和私有方法的问题

不要将只读属性与只读字段混淆。

   public class Square
   {
        public Square(double lengths)
        {
           Length = lengths;
           Area = computeArea();
        }
        //Read only property for Length (privately settable)
        public double Length {get; private set;}
        //Read only property for Area (privately settable)
        public double Area {get; private set;}
        //Private method to compute area.
        private double ComputeArea()
        {
            return Length * Length;
        }
    }

只读变量确实可以在构造函数中分配,但不能在从构造器调用的方法中分配。有一些方法可以做到这一点,即:链接。正确的方法是计算面积并将结果存储在面积变量中。

不过,我认为这个问题的含义是不同的。引用你的话:

还包括只读属性以获取正方形侧和面积。

意思是,这个问题意味着你使用Properties.这意味着,您将使用私有变量进行lengtharea,并为每个变量实现一个get-only属性:

public double Area 
{
    get
    {
       return area;
    }
}

该问题提到只读属性,而不是只读字段。

只读字段只能在构造函数中或由字段初始值设定项分配。只读属性只能在类内部分配。

public class Square
{
   // Readonly field, can only be assigned in constructor or initializer
   private readonly double _sideLength;
   // Readonly property since it only contains a getter
   public double SideLength { get { return _sideLength; } }
   // Readonly property from outside the class since the setter is private
   public double Area {get; private set;}
   public Square( double sideLength )
   {
        _sideLength = sideLength;
        CalcSquare();
   }
   private void CalcSquare()
   {
      this.Square = _sideLength * _sideLength;
   }
}
考虑如果不

尝试将计算区域分配给area字段,而是从 computeArea 返回值,将如何重构代码。

作为附加练习,请尝试将computeArea设置为静态,看看这对代码有何影响。

你的赋值从来没有说过你的私有函数应该分配区域。它说构造函数应该使用私有方法的结果分配区域:

public class Square
{
    private readonly double length;
    private readonly double area;
    public Square(double length) 
    {
        this.length = length;
        this.area = computeArea(length); // assignment of area in constructor!
    }
    private double ComputeArea(double length) 
    {
         return length * length;
    }
}