只读和私有方法的问题
本文关键字:问题 有方法 只读 | 更新日期: 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
.这意味着,您将使用私有变量进行length
和area
,并为每个变量实现一个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;
}
}