如何创建计算属性

时间:2011-10-20 16:17:02

标签: c#

说我有一些属性

public int redBalls { get; set; }
public int blueBalls { get; set; }

我现在想要一个totalBalls属性,它将添加两个。

我会这样做吗?

public int totalBalls { get { return redBalls + blueBalls; } }

我正在尝试这个,但结果是0

*编辑,我已经和我的首席开发人员交谈了,因为无论访问的是什么,totalBalls都没有收到redBalls或blueBalls更改的通知,所以它不会重新计算这些值

所以我必须做OnPropertyChanged("total")

3 个答案:

答案 0 :(得分:1)

为你写了一个测试...这对我来说很成功。

[Test]
public void SO()
{
    var testing = new Testing();
    Assert.AreEqual(0, testing.RedBalls);
    Assert.AreEqual(0, testing.BlueBalls);
    Assert.AreEqual(0, testing.TotalBalls);

    testing.RedBalls = 2;
    testing.BlueBalls = 4;
    Assert.AreEqual(2, testing.RedBalls);
    Assert.AreEqual(4, testing.BlueBalls);
    Assert.AreEqual(6, testing.TotalBalls);
}

class Testing
{
    public int RedBalls { get; set; }
    public int BlueBalls { get; set; }
    public int TotalBalls { get { return RedBalls + BlueBalls; } }
}

答案 1 :(得分:0)

除了属性名称的大小写之外,您的代码没有任何问题,这纯粹是装饰性的。

totalBalls将= 0,而redBallsblueBalls的总和为0,显然,它们都将为0,直到它们被设置为其他值。

修改

您没有在OP或标记中提及DependecyProperty,如果依赖属性绑定到totalBalls属性,则不会知道totalBalls是从其他属性计算的属性。

您应该扩展依赖项属性的定义,以便其元数据包含可以检测聚合更改的PropertyChangedCallback,而不是将简单类与WPF耦合。

答案 2 :(得分:0)

您必须实际设置红球/蓝球的值

class Balls
{
    public int redBalls { get; set; }
    public int blueBalls{ get; set; }

    public int totalBalls{ get{ return redBalls + blueBalls; } }
}

void test()
{
    // You must acutally set the value of redBalls/blueBalls
    var balls = new Balls{ redBalls = 1, blueBalls = 2 };
    Assert.AreEqual(3, balls.totalBalls);
}