嘿,我有以下代码:
namespace testingLeap
{
class Program : Listener
{
GestureListener listener;
Controller controller;
static void Main(string[] args)
{
listener = new GestureListener(500);
listener.onGesture += listener_onGesture;
Controller controller = new Controller(listener);
我想与程序中的其他静态void函数共享侦听器和控制器。但是,执行上述操作时会出现错误:
非静态字段,方法或属性'testingLeap.Program.listener'
需要对象引用我做错了什么?我知道在VB中这有用:
Dim listener As New GestureListener(500)
Dim controller As New Controller(listener)
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
listener.onGesture += listener_onGesture
End Sub
答案 0 :(得分:2)
您可以将字段标记为static
或传递包含的类。
static
字段:
static GestureListener listener;
或者如果您打算使用不同种类的工厂方法。
public interface IGestureListenerFactory
{
GestureListener GetGestureListener(int arg);
}
public class GestureListenerFactory : IGestureListenerFactory
{
private static readonly object Locker = new object();
private static readonly Dictionary<int, GestureListener> _listener = new Dictionary<int, GestureListener>();
public GestureListener GetGestureListener(int arg)
{
GestureListener listener;
if(!_listener.TryGetValue(arg, out listener))
{
lock(Locker)
{
if(_listener.ContainsKey(arg))
return _listener[arg];
listener = new GestureListener(arg);
_listener.Add(listener);
}
}
return listener;
}
}
答案 1 :(得分:1)
如果要在static
方法中使用listener
,则需要controller
使用static
修饰符和<{1}}
static GestureListener listener;
static Controller controller;
了解详情:MSDN