【问题标题】:Pointer to a function in C# [closed]指向 C# 中的函数的指针 [关闭]
【发布时间】:2013-10-14 11:02:47
【问题描述】:

我想写一个这样的函数:

class Form 
{
    private void Foo()
    {
        int bar = 42;
        function myF = func1;

        if(today.weather == sunny)
            myF = func2;

        myF(bar);
    }

    private void func1(int bar) 
    {
        // do something
    }

    private void func2(int bar)
    {
        // do something
    }
}

我需要一个指向函数的指针(比如 C),可以创建一个吗?

【问题讨论】:

标签: c# function-pointers


【解决方案1】:

您正在寻找Delegate

class Form 
{
    private void Foo()
    {
        int bar = 42;
        Action<int> myF = func1; //<-- Action<T> is a delegate 

        if(today.weather == sunny)
            myF = func2;

        myF(bar);
    }

    private void func1(int bar) 
    {
        // do something
    }

    private void func2(int bar)
    {
        // do something
    }
}

【讨论】:

    【解决方案2】:

    查看Delegates (C# Programming Guide)

    class Form 
    {
        delegate void MyFunction (int bar); 
        private void Foo() {
            int bar = 42;
            MyFunction myF = func1;
            if(today.weather == sunny)
                myF = func2;
            myF(bar);
        }
        private void func1(int bar) { 
            // do something 
        }
        private void func2(int bar) {
            // do something 
        }
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用委托,但我更喜欢 FuncAction(取决于是否有返回类型)。

      class Form 
      {
          private void Foo()
          {
              int bar = 42;
              Action<int> myAction = func1;
      
              if(today.weather == sunny)
                  myAction = func2;
      
              myAction(bar);
          }
      
          private void func1(int bar) 
          {
              // do something
          }
      
          private void func2(int bar)
          {
              // do something
          }
      }
      

      【讨论】:

        【解决方案4】:

        看看:http://msdn.microsoft.com/en-us/library/ms173171(v=vs.90).aspx

        您可以创建自己的delegate

        delegate void MyDel(int x);
        

        或使用预定义的:

        Action<Int>
        

        在任何一种情况下,这些都可用于创建您需要的内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-27
          • 1970-01-01
          • 1970-01-01
          • 2020-10-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多