【问题标题】:Partial method is not called?不调用部分方法?
【发布时间】:2016-02-03 17:25:32
【问题描述】:

File2 中的部分方法永远不会被调用。 File2中如何调用Init()

文件1

public partial class frmMy001 : Form, ITab1View
{
    public frmMy001()
    {
        Init();
    }

    partial void Init();
}

文件2

public partial class frmMy001 : Form, ITab2View
{
    partial void Init();

    partial void Init()
    {
        ...// Breakpoint never hit
    }
}

【问题讨论】:

  • 当前代码编译失败,出现“部分方法可能没有多个定义声明”。请发帖minimal reproducible example
  • @JonSkeet 它实际上是在我的 VS 2015 上编译的。但删除部分签名失败编译。
  • 这表明您将它们放在不同的名称空间中。 (这是 complete 示例会突出显示的那种事情。)作为另一种证明方式,尝试在一个部分添加一个公共成员,然后从另一部分调用它 - 我怀疑你会发现你做不到。
  • @JonSkeet 正确。我没注意命名空间不同。
  • 对。此时,您应该更新问题或将其删除。如果你只是更新它,我很乐意添加一个答案......但老实说,一旦你发布命名空​​间不同,无论如何它很可能很明显。

标签: c# partial-classes


【解决方案1】:

删除文件中的声明

public partial class frmMy001 : Form, ITab2View
{
    // partial void Init(); <-- remove this

    partial void Init()
    {
        ...// Breakpoint never hit
    }
}

您的部分方法必须满足以下条件:

  • 部分类型的两个部分中的签名必须匹配。
  • 该方法必须返回 void。
  • 不允许使用访问修饰符。部分方法是隐式私有的。

【讨论】:

  • 最好将其注释掉以突出显示您正在谈论的内容,而不是完全删除它。
【解决方案2】:

部分方法签名应该只在部分类的一个部分中声明。尝试删除 'partial void Init();'来自 File2 的声明。

【讨论】:

    猜你喜欢
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 2011-07-22
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多