属性setter中出现StackOverflow异常
本文关键字:StackOverflow 异常 setter 属性 | 更新日期: 2023-09-27 18:21:56
我是编程新手,目前正在学习C#课程。我被这几周的任务弄糊涂了。这是我的任务:
创建一个包含类"Distance"的文件。内部距离保持在1/64英寸的精度。
Distance必须有一个专用的无符号整数变量"SixtyFourths",该整数的确切值应该是Distance所代表的英寸的1/64。
创建一个属性"Inches"以获取和设置以英寸为单位的双倍值的Distance。
创建一个特性"Feet"以获取和设置以英尺为单位的双倍值的"Distance"。
创建一个特性"米",以获取和设置以米为单位的双倍值的"距离"。
创建一个属性"FtInFraction"以获取字符串形式的当前距离,或者设置与字符串的距离,您必须使用的字符串格式如下所示。
根据需要编写私有方法来完成所需的工作。只有属性和构造函数可以是公共的。
将浮点值转换为整数时,请确保使用正确的舍入规则。
用"main"写一个简短的程序。内部干线:
创建由类定义的对象"距离"的实例。
距离演示=新距离();Demo.Feet=1.1;string FeetInchesFraction=Demo.FtInFraction;//应为:"1'1 13/64"Demo.FtInFraction="3'3 3/8";Double Meters=Demo.Meters;//由于的舍入,将为1.00125米
使用控制台输出的屏幕截图进行详尽的测试。详尽的测试通过数千种可能性来验证FtInFraction在所有情况下都会生成和解释字符串值。这很容易通过循环来完成。
以下是我迄今为止为该类编写的代码:
namespace Measurement_Converter
{
class Distance
{
public double Meters
{
get
{
return Meters;
}
set
{
Meters = 0;
}
}
// Feet
public double Feet
{
get
{
return Meters / .30480;
}
set
{
Meters = value * 3.34375;
}
}
public string FeetString
{
get
{
StringBuilder SB = new StringBuilder();
return SB.ToString();
}
set
{
string raw = value;
}
}
// Inches
private int SixtyFourths;
public double Inches
{
get
{
return SixtyFourths;
}
set
{
SixtyFourths = 0;
if (value % 2 == 0)
return;
SixtyFourths = (int)(value / 2);
}
}
public double FtInFraction
{
get
{
return FtInFraction;
}
set
{
}
}
}
}
这是我为main编写的代码:
namespace Measurement_Converter
{
class Program
{
static void Main(string[] args)
{
Distance T = new Distance();
T.Meters = 12;
string Test = T.FeetString;
}
}
}
我现在的问题是,在我的米课的设置部分,我遇到了堆叠失败。我肯定会遇到的问题是由于我缺乏经验。我希望有人能帮助我理解堆栈溢出错误,并可能帮助我了解程序的其余部分可能需要做什么,或者至少有一个类似的例子,我可以用它来理解这种外语。此外,我明白了任务的要点,但如果有人能用外行的话解释测试部分的话。我不想有人替我做工作,但这项任务让我很困惑,这让我很沮丧。
您的Metres
属性与后备字段(变量)同名,并且正在递归调用。您可能对自动属性与自己声明"backing"字段感到困惑。
你可以这样实现:
class Distance
{
private double _meters;
public double Meters
{
get
{
return _meters;
}
set
{
_metres = value;
}
}
.....
或者像这样:
class Distance
{
public double Metres{ get; set; }
....
参考:自动实现属性