试图了解C#中的属性如何工作

时间:2015-11-06 00:54:12

标签: c# variables get set

我正在尝试获取用户输入并检查其是否是用户输入的最大数字;最大数量应该保存到maxResult变量,我试图这样做得到并设置由C#使用 以下是代码:

    //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永远不会被任命,任何想法如何解决这个问题。

5 个答案:

答案 0 :(得分:2)

这里有几个错误......

这永远不会成真:

if (intJudgeResult > intJudgeResult)

我认为你的意思是:

if (intJudgeResult > _maxResult)

此外,这是一个等待发生的堆栈溢出异常:

maxResult = intJudgeResult;

您的意思是设置支持变量,而不是属性:

_maxResult = intJudgeResult;

(在属性中设置属性会导致setter无限调用自身。)

至于初始化值...由于它是int,因此默认为0。值类型必须具有值。如果您愿意,可以随时将其初始化为其他内容:

private static int _maxresult = 1;

任何关于不初始化值的编译器警告可能是上面第二个问题的结果,因为您没有自己设置值。

答案 1 :(得分:0)

首先不要过度使用静电。

//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;
    }
}

答案 2 :(得分:0)

你的二传手不正确,你有几个问题。

第一个问题是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;
    }
}

答案 3 :(得分:0)

在您的示例代码中,_maxresult成员是标准静态字段。以与任何其他字段相同的方式初始化它:

private static int _maxresult = 0;

如果要延迟初始化,则需要某种方式来指示该字段尚未初始化。对于int,您可以将一些无效值指定为字段初始值设定项,然后在属性的get方法中测试该值。

答案 4 :(得分:0)

这可以解决问题:

    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; }