【问题标题】:c# public function defined and used in other functionsc# public function 定义并在其他函数中使用
【发布时间】:2013-05-17 23:15:46
【问题描述】:

大家好,我有以下代码:

 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 函数共享 listenercontroller。但是,执行上述操作会出错:

非静态字段、方法或属性“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

【问题讨论】:

  • 您拥有的代码不会按原样编译。您甚至无法从Main 访问listener,因为它不是静态的并且您没有实例。请注意,您展示的两个程序是完全不同的上下文。您显示的 VB 函数不是 static(在 VB 中为 shared)。

标签: c# function listener


【解决方案1】:

您可以将该字段标记为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;
    }

}

【讨论】:

  • 感谢您也提供回复,Romoku。
【解决方案2】:

如果你想在static 方法中使用listenercontroller,你需要使用static 修饰符

static GestureListener listener;
static Controller controller;

阅读更多:MSDN

【讨论】:

  • 就是这样!谢谢你的帮助,梅兰。
猜你喜欢
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
相关资源
最近更新 更多