2011-02-24 71 views
0

我有10个属性,当每个设置它增加变量的值Value。当Value的值为10时,该应用将结束。但它似乎是尴尬写在相同的条件为他们每个人是这样的:具有递增一个变量的多个属性。简单检查其价值?

int Value=0; 
int A 
{ 
    set 
    { 
    a=value; 
    Value++; 
    if(Value>10) ... //check here 
    } 
} 
int B 
{ 
    set 
    { 
    b=value; 
    Value++; 
    if(Value>10) //check here again 
    } 
} 

我怎么能简化检查它的价值?

回答

0
private int counter; 
private int b; 
private int a; 

public int A 
{ 
    set 
    { 
     counter++; 
     a = value; 
     CheckCounter(); 
    } 
} 

public int B { 
    set 
    { 
     counter++; 
     b = value; 
     CheckCounter(); 
    } 
} 


public void CheckCounter() 
{ 
    if (counter>10) 
    { 
     //Do something 
    } 
} 

或使计数器属性..

private int Counter 
{ 
    set 
    { 
     counter = value; 
     CheckCounter(); 
    } 
    get 
    { 
     return counter; 
    } 
} 

和增加时使用此..

Counter++; 
1

您可以为Value创建一个私有属性,并在该属性的设置器中,如果该值设置为10以上,则退出应用程序。

private int value=0; 
private int a, b; 

public int A 
{ 
    set 
    { 
     this.a = value; 
     Value++; 
    } 
    get { return this.a; } 
} 
public int B 
{ 
    set 
    { 
     this.b = value; 
     Value++; 
    } 
    get { return this.b; } 
} 
private int Value 
{ 
    set 
    { 
     this.value = value; 
     if (this.value > 10) 
     { 
     // Exit. 
     } 
    } 
    get { return this.value; } 
} 
+0

值将需要一个gettter增加... – 2011-02-24 09:19:00

+0

我知道,我只是试图保持例子简短。我已经更新了我的答案,现在包括getter。 – 2011-02-24 09:36:51

0

从@Richard和@Emil这两个答案都是正确的,但为了使您的代码在将来更具可扩展性,最好实施内置的INotifyPropertyChanged interface

class Data : INotifyPropertyChanged 
{ 
    private int _counter = 0; 

    public event PropertyChangedEventHandler PropertyChanged = (sender, arg) => 
     { 
      // if (_counter > 10) Exit(); 
      // from arg you can know what property is changed 
      // which is probably used for future 
     }; 

    private int _number; 
    public int Number 
    { 
     get { return _number; } 
     set 
     { 
      //here is another unclear point in your question 
      //will the counter increases when setting a.Number = 100 
      //but it's already 100 before setting 
      if (_number != value) 
      { 
       _number = value; 
       PropertyChanged(this, new PropertyChangedEventArgs("Number")); 
      } 
     } 
    } 
} 
1

我假设你的属性是它具有其他责任比退出程序时,柜台命中10.如果是这样,我会删除检查柜台,从离开应用程序的逻辑类类。 也许你可以使用一个事件。这个事件的订阅者会在Value达到10时通知您(您实际上可以设置“10”,但这只是一个简短的例子)并退出应用程序。

class YourClass { 
    public event ValueHandler ValueIs10; 
    public EventArgs e = null; 
    public delegate void ValueHandler(YourClass m, EventArgs e); 

    private int _value=0; 

    public int Value { 
     get {return _value;} 
     private set { 
      _value=value; 
      if(_value==10 && ValueIs10 != null) ValueIs10(this, e); 
     } 
    } 

    public int A 
    { 
     set 
     { 
     a=value; 
     Value++; 
     } 
    } 

    public int B 
    { 
     set 
     { 
     b=value; 
     Value++; 
     } 
    } 

    // ... 
} 
+0

在我看来,这是最好的答案。虽然其他答案的工作,这一个有最好的设计。 – 2011-02-24 09:48:10