如何在变量更改时自动调用函数?
How a function can be automatically called upon a variable change?
我有一个class,由变量成员和函数成员组成。可变成员偶尔会发生变化。我希望在变量更改时自动调用该函数。换句话说,如何将变量绑定到 class?
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 发生变化时更新长度。
将变量放入属性中,然后将函数放入集合访问器中。
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);
}
}
你可以你的属性
int x
int X {
get { return x; }
set { x = value; YouMethod();}
}
如果您定义属性,在您的 class 上,您可以制作 X
和 Y
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);
}
}
}
正如 BenJ 所说,您可以使用属性。
而不是将 x 和 y 声明为 class 中的简单字段。您可以通过以下方式将它们声明为属性:
private double x;
public double X
get
{
return this.x;
}
set
{
this.x = value;
this.length()
//Above line will call your desired method
}
您可以使用计算得出的 属性 like
实现非常相似的行为
double Length
{
get { return Math.sqrt(x*x+y*y); }
}
唯一需要注意的是,即使 x
和 y
没有改变,每次调用 Length
时都会执行计算。
您可以将 x
和 y
字段封装到属性中并从 setter 调用 length
函数,例如
double X
{
get { return x; }
set
{
x = value;
length();
}
}
double Y
{
get { return y; }
set
{
y = value;
length();
}
}
然后仅通过 X
和 Y
属性更改 x
和 y
。
我有一个class,由变量成员和函数成员组成。可变成员偶尔会发生变化。我希望在变量更改时自动调用该函数。换句话说,如何将变量绑定到 class?
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 发生变化时更新长度。
将变量放入属性中,然后将函数放入集合访问器中。
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);
}
}
你可以你的属性
int x
int X {
get { return x; }
set { x = value; YouMethod();}
}
如果您定义属性,在您的 class 上,您可以制作 X
和 Y
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);
}
}
}
正如 BenJ 所说,您可以使用属性。
而不是将 x 和 y 声明为 class 中的简单字段。您可以通过以下方式将它们声明为属性:
private double x;
public double X
get
{
return this.x;
}
set
{
this.x = value;
this.length()
//Above line will call your desired method
}
您可以使用计算得出的 属性 like
实现非常相似的行为double Length { get { return Math.sqrt(x*x+y*y); } }
唯一需要注意的是,即使
x
和y
没有改变,每次调用Length
时都会执行计算。您可以将
x
和y
字段封装到属性中并从 setter 调用length
函数,例如double X { get { return x; } set { x = value; length(); } } double Y { get { return y; } set { y = value; length(); } }
然后仅通过
X
和Y
属性更改x
和y
。