是否可以为事件处理程序声明一个全局变量?
Is it possible to declare a global variable for an event handler?
如何以及在哪里可以将下面的变量i声明为全局变量?(我在MyClass下面的main上面声明它时出错)
class MyClass
{
public static void Main()
{
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
}
public static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
int i;
//
my_method();
}
private static void my_method(){
//
}
}
在我的代码中,出于某种原因,我希望将 i 存储为全局变量,以存储 i 的先前值。
class MyClass
{
public static int i;
public static void Main()
{
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
}
public static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
i = 1;
//
my_method();
}
private static void my_method()
{
i = 2;
}
}
变量是public还是protected,可以参考下面的内容。如果它仅在 MyClass class 中被引用,那么 protected 就足够了。
将此放入您的 MyClass
class:
private static int _i = 0;
private static List<int> _previousValuesOfI = new List<int>();
public static int I
{
get => _i;
set
{
if (_i != value)
{
_previousValuesOfI.Add(value);
}
_i = value;
}
}
public static IEnumerable<int> PreviousIValues => _previousValuesOfI;
现在,任何人都可以通过 MyClass.I
获取全局 I
的当前值。他们也可以用同样的方式设置 I
的当前值。但是,当他们这样做时,您会跟踪以前的版本,这些版本可从 PreviousIValues
属性 获得(最旧的版本在前)。如果你想把最旧的版本放在最后,考虑使用 _previousValuesOfI.Insert(0, value);
而不是 _previousValuesOfI.Add(value);
如何以及在哪里可以将下面的变量i声明为全局变量?(我在MyClass下面的main上面声明它时出错)
class MyClass
{
public static void Main()
{
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
}
public static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
int i;
//
my_method();
}
private static void my_method(){
//
}
}
在我的代码中,出于某种原因,我希望将 i 存储为全局变量,以存储 i 的先前值。
class MyClass
{
public static int i;
public static void Main()
{
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
}
public static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
i = 1;
//
my_method();
}
private static void my_method()
{
i = 2;
}
}
变量是public还是protected,可以参考下面的内容。如果它仅在 MyClass class 中被引用,那么 protected 就足够了。
将此放入您的 MyClass
class:
private static int _i = 0;
private static List<int> _previousValuesOfI = new List<int>();
public static int I
{
get => _i;
set
{
if (_i != value)
{
_previousValuesOfI.Add(value);
}
_i = value;
}
}
public static IEnumerable<int> PreviousIValues => _previousValuesOfI;
现在,任何人都可以通过 MyClass.I
获取全局 I
的当前值。他们也可以用同样的方式设置 I
的当前值。但是,当他们这样做时,您会跟踪以前的版本,这些版本可从 PreviousIValues
属性 获得(最旧的版本在前)。如果你想把最旧的版本放在最后,考虑使用 _previousValuesOfI.Insert(0, value);
而不是 _previousValuesOfI.Add(value);