“创建一个名为”DemoSquare“的程序,它启动一个10个Square对象的数组,其边长为1-10,并显示每个方块的值.Start类包含区域的字段和长度。 side,以及一个构造函数,它需要一个区域的参数和一个边的长度。构造函数将其参数分配给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
这是Square 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;
}
}
答案 0 :(得分:7)
不要将只读属性与只读字段混淆。
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;
}
}
答案 1 :(得分:2)
这个问题提到了readonly属性,而不是readonly字段。
readonly字段只能在构造函数或字段初始值设定项中分配。 readonly属性只能在类中分配。
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;
}
}
答案 2 :(得分:2)
确实可以在构造函数中指定只读变量,但不能在从constrctor调用的方法中指定。有办法做到这一点,即:link。正确的方法是计算面积并将结果存储在区域变量中。
但是,我相信,问题的含义是不同的。引用你:还包括只读属性以获取Squares侧和区域。
意思是,这个问题意味着您使用Properties
。这意味着,您将使用length
和area
的私有变量,并为每个变量实现一个get-only属性:
public double Area
{
get
{
return area;
}
}
答案 3 :(得分:0)
如果您没有尝试将计算区域分配到area
字段,而是从computeArea
返回值,请考虑重构代码的方式。
作为一项额外练习,请尝试将computeArea
设为静态,并查看它对代码的影响。
答案 4 :(得分:0)
您的分配从未说过您的私人功能应分配区域。它说构造函数应该为区域分配私有方法的结果:
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;
}
}