【问题标题】:C# form needs to call method defined in parent formC#表单需要调用父表单中定义的方法
【发布时间】:2013-03-28 18:19:36
【问题描述】:

我有一个继承自部分类表单 (MainForm) 的表单 (EmployeeForm)。在MainForm 内部,我有一个要调用的方法(SaveSomething)。

我该怎么做?

using SomeLib;

namespace FooEmployee
{
    public partial class EmployeeForm: MainForm
    {
        private void dgv_DoubleClick(object sender, EventArgs e)
        {
             SaveSomething();
        }
    }    
}

namespace SomeLib
{
    public partial class MainForm: Form
    {
        private bool SaveSomething()
        {
        }
    }
}

【问题讨论】:

  • 这对您有帮助吗? stackoverflow.com/questions/5743611/…
  • @AwesomeProgrammer:虽然我愿意打赌它周围有一个重复项,但看起来这个问题不符合条件,因为没有提到一种形式从另一种继承。无论如何,我认为这个问题的质量也很差。

标签: c# .net oop


【解决方案1】:

使用protected 作为方法的访问修饰符,而不是private

private 仅表示该方法所在的类。另一方面,protected 表示当前类以及所有从它继承的类。

您的代码将如下所示:

public partial class MainForm: Form
{
    protected bool SaveSomething()
    {
        // ...
    }
}

这称为Access Modifier,该链接指向有关 C# 中所有可用访问修饰符的 MSDN 文章(publicprivateprotectedinternalprotected internal)。

【讨论】:

  • Rudi,我了解受保护的访问修饰符并且我已经实现了这一点,但是在引用“SaveSomething()”方法时出现错误。
  • 错误:“SomeLib.MainForm”不包含“SaveSomething”的定义。
  • @JimKiely 我刚刚测试了与上面完全相同的代码,修改为protected,它工作正常吗?
  • "MainForm.SaveSomething();" - 这就是我从双击事件方法中调用该方法的方式。有什么想法吗?
  • 是的,不要那样做。使用SaveSomething();,就像你拥有它一样。您尝试做的是在类上期待一个名为 SaveSomething 的静态方法,而不是类的实例。 SaveSomethingthis 中可用,所以你根本不需要量化它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 2015-05-10
  • 1970-01-01
  • 2012-11-06
相关资源
最近更新 更多