【问题标题】:Could not use Delegate's Method Property in C#?无法在 C# 中使用委托的方法属性?
【发布时间】:2017-06-16 15:52:58
【问题描述】:

当我尝试在 C# 中使用委托的方法属性时,我收到此错误。

“myDelegate”不包含“方法”的定义,也没有 扩展方法“方法”接受类型的第一个参数 可以找到“myDelegate”(您是否缺少 using 指令或 汇编参考?)

我真的不知道我得到这个的原因。我的程序相当简单,并且基于委托。下面给出了它的代码:

public delegate void myDelegate(int x);
public class Program
{
    public void Main(string[] args)
    {
        X x = new X();
        myDelegate d = x.InstanceProgress;
        Console.WriteLine(d.Method);
    }
}

class X
{
   public void InstanceProgress(int percent) => Console.WriteLine(percent);
}

我在这一行遇到错误:

Console.WriteLine(d.Method);

请看下面的这张图片,虽然我得到了正确的输出,但我得到了错误。 我在图像上用绿色箭头标记了错误。

【问题讨论】:

  • 你知道,它的“代表”不是“代表”(虽然代表听起来有点好吃......)
  • 你的目标是什么框架?
  • 解决方案 DNX SDK 版本:1.0.0-beta5
  • 您要执行 InstanceProgress 中的什么方法?显然,InstanceProgress 的定义中不包含 Method。这是某本书中的一些例子还是类似的东西?
  • 因此,在这里做的适当的事情似乎是将其作为 Microsoft 的错误提出

标签: c#


【解决方案1】:

查看 OP 的屏幕截图。这看起来像是 Visual Studio 错误。而且由于它可以让您构建它,所以它不是一个真正的错误。我在 VS2015 中没有收到该错误。

我会清理解决方案并重新启动 Visual Studio。那应该清除它。

旧:

你会想做这样的事情:

X x = new X();
myDeligate d = x.InstanceProgress;
d.Invoke(5);

// or as Rahul pointed out you can simply use
d(5);

Invoke() 是实际调用该方法的对象。在此之前,委托只是指向您要调用的方法的指针。

【讨论】:

  • 为什么不只是d(5)
  • 这与调用方法无关。 .Method 是一个内置属性,它提供将要调用的方法的名称和参数。
  • @yogihosting 那么您希望在您的原始代码中发生什么?
  • 那么你的委托需要指向一个类而不是一个方法
  • 好吧,虽然这是一个正确的答案,但 OP 肯定不是在寻找相同的答案。您可能希望看到 OP 的相关评论
猜你喜欢
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
相关资源
最近更新 更多