C#unused属性崩溃我的代码

时间:2018-01-09 11:27:00

标签: c# oop

代码根据调试打印不同的答案。我错了什么?

class Program
{
    static void Main(string[] args)
    {
        Feld feld = new Feld();
        feld.Setze = 5;
        Console.WriteLine(feld.Besetzt);
        Console.Read();
    }
}

public class Feld
{
    public int figur;

    public bool Besetzt { get => (figur != 0) ? true : false; }
    public int Setze { set => figur = value; }
    public int Nehmen { get { int cur = figur; figur = 0; return cur; } }
}

如果我删除最后一个属性,但为什么?

2 个答案:

答案 0 :(得分:4)

要扩展现有的评论和答案:您的Nehmen属性有令人讨厌的副作用

public int Nehmen { get { int cur = figur; figur = 0; return cur; } }

每次值时,重置本身为零。这是一个非常糟糕的主意 - 属性get访问者会产生意外的副作用。工具的大部分期望读取Nehmen不能,IDE /调试器通常会尝试通过查询属性来帮助您理解数据告诉你。

这意味着当调试器试图帮助时,它实际上是重置值。

所以:让Nehmen成为方法

public int Nehmen()
{
    int cur = figur;
    figur = 0;
    return cur;
}

系统期望方法有副作用,因此不会调用它们来“帮助”你。

属性get访问器的唯一有效副作用是调用延迟加载/初始化副作用。

答案 1 :(得分:2)

您必须在Visual Studio的监视窗口中拥有变量Nehmen ...或者尝试以其他方式访问它