c#public function在其他函数中定义和使用

时间:2013-05-22 18:59:39

标签: c# function listener

嘿,我有以下代码:

 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

2 个答案:

答案 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