试图理解C#中的属性是如何工作的
本文关键字:何工作 工作 属性 | 更新日期: 2023-09-27 18:20:41
我正在尝试获取用户输入,并检查它是否是用户输入的最大值;最大值应该保存到maxResult
变量中,我正在尝试这样做,以便C使用get和set#以下是代码:
//Number entred by user
private static int intJudgeResult { get; set; }
// varibale where to save the max entred number
private static int _maxresult;
private static int maxResult {
get
{
return _maxresult;
}
set
{
if (intJudgeResult > intJudgeResult )
maxResult = intJudgeResult ;
}
}
我知道这个人可以很好地设置maxResult = intJudgeResult
,但我第一次尝试使用get和set:p问题是_maxresult
从未初始化,不知道如何解决这个问题。。
这里出现了几个错误。。。
这永远不会是真的:
if (intJudgeResult > intJudgeResult)
我想你的意思是:
if (intJudgeResult > _maxResult)
此外,这是一个等待发生的堆栈溢出异常:
maxResult = intJudgeResult;
您的意思是设置后备变量,而不是属性:
_maxResult = intJudgeResult;
(从属性中设置属性会导致setter无限调用自己。)
对于初始化值。。。由于它是一个int
,它将默认为0
。值类型必须具有值。如果你喜欢的话,你可以随时将其初始化为其他东西:
private static int _maxresult = 1;
任何关于未初始化值的编译器警告都可能是上面第二个问题的结果,因为您没有设置值本身。
在示例代码中,_maxresult
成员是一个标准静态字段。以与任何其他字段相同的方式初始化它:
private static int _maxresult = 0;
如果要延迟初始化,则需要某种方式来指示字段尚未初始化。对于int
,您可以为其指定一些无效值作为字段初始值设定项,然后在属性的get
方法中测试该值。
首先不要过度使用静态。
//Number entered by user
private int _judgeResult
private int JudgeResult {
get
{
return _judgeResult;
}
set
{
_judgeResult = value;
if (MaxResult < value)
MaxResult = value;
}
}
// variable where to save the max entered number
private int _maxresult;
private int MaxResult {
get
{
return _maxresult;
}
set
{
_maxresult = value;
}
}
您的setter不正确,并且您有几个问题。
第一个问题是maxResult = intJudgeResult;
应该是_maxResult = intJudgeResult
。
现在的方法应该是引起一个无限循环。通过,仅此更改并不能解决您的问题
第二个问题是条件intJudgeResult > intJudgeResult
永远不会成立。
第三个问题是您没有使用特殊变量value
来接受属性的输入值。
我认为这就是你想要的,尽管我想说房产可能不是实现的最佳方式
//Number entred by user
private static int _intJudgeResult;
private static int intJudgeResult
{
get
{
return _intJudgeResult; //EDIT: Missed the _ before
}
set
{
intJudgeResult = value;
maxResult = intJudgeResult;
}
// varibale where to save the max entred number
private static int _maxresult = 0;
private static int maxResult
{
get
{
return _maxresult;
}
set
{
if (value > intJudgeResult )
_maxResult = value;
}
}
这将解决问题:
public static int _judgeresult;
private static int judgeResult
{
get { return _judgeresult; }
set {
_judgeresult = value;
if (value > MaxValue)
MaxValue = value;
}
}
private static int MaxValue { get; set; }