0

嘿,我有以下代码:

 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
4

2 回答 2

2

You can mark the field as static or pass around a containing class.

static field:

static GestureListener listener;

or maybe some kind of factory method if you intend to have different kinds.

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;
    }

}
于 2013-05-22T19:05:27.283 回答
1

你需要使用static修饰符 forlistenercontrollerif 你想在static方法中使用它们

static GestureListener listener;
static Controller controller;

阅读更多:MSDN

于 2013-05-22T19:08:40.330 回答