如何在变量变化时自动调用函数?

时间:2017-03-29 17:32:58

标签: c# class function-call

我有一个由变量成员和一个函数成员组成的类。变量成员偶尔会改变。我希望在变量更改时自动调用该函数。换句话说,如何将变量绑定在类中?

class line
{
   double x, y; // The poition of the lind end. The line starts at the origin (0,0)
   double l; // The length of the line
   void length()
   {
      l = Math.sqrt(x*x+y*y);
   }
}

在上面的示例中,我需要在x和y更改时更新长度。

5 个答案:

答案 0 :(得分:3)

将变量设为属性,然后将函数放入集合加法器中。

class line
{
    double _x, _y;

    double x
    {
        get { return _x; }
        set
        {
            _x = value;
            length();
        }
    }

    double y
    {
        get { return _y; }
        set
        {
            _y = value;
            length();
        }
    }

    double l; // The length of the line

    void length()
    {
        l = Math.Sqrt(_x * _x + _y * _y);
    }
}

答案 1 :(得分:2)

如果您定义了属性,则可以在您的班级上设置XY autoprops,然后创建一个根据这些值计算的只读属性L

public class Line //class names should be Capitalized
{
   public double X{ get; set; } //prop names should be Capitalized
   public double Y{ get; set; }
   public double L{
    get{
      return Math.Sqrt(X * X + Y * Y);
    }
   }
}

答案 2 :(得分:1)

你可以属性

int x
int X {
   get { return x; }
   set { x = value; YouMethod();}
}

答案 3 :(得分:1)

  1. 您可以使用计算属性(如

    )实现非常相似的行为
    double Length
    {
        get { return Math.sqrt(x*x+y*y); }
    }
    

    唯一需要注意的是,即使Lengthx没有变更,也会在每次调用y时执行计算。

  2. 您可以将xy字段封装到属性中,并从setter调用length函数,如

    double X
    {
        get { return x; }
        set 
        {
            x = value;
            length();
        }
    }
    
    double Y
    {
        get { return y; }
        set 
        {
            y = value;
            length();
        }
    }
    

    然后仅通过xy属性更改XY

答案 4 :(得分:0)

正如BenJ所说,你可以使用属性。

而不是将x和y声明为类中的简单字段。您可以通过以下方式将它们声明为属性:

private double x;
public double X
get
    {
        return this.x;
    }

    set
    {
        this.x = value;

        this.length()
        //Above line will call your desired method
    }