【问题标题】:Multiple Inheritance for partial class部分类的多重继承
【发布时间】:2019-12-13 04:41:57
【问题描述】:

我正在查看我继承的一些代码。我添加了PrintSpecialInfo() 方法并在尝试调用它时得到下面的错误显示。 我对SpecialPermit 类感到困惑。这是PermitSystem.Windows.Forms.UserControl 的多重继承的情况吗? 如何通过btnSave_Click 方法访问PrintSpecialInfo

Permit.part.cs

public partial class Permit : System.IComparable
{

    public partial class SpecialPermit : Permit
    {
        public virtual void PrintSpecialInfo()
        {
            System.Diagnostics.Trace.WriteLine("Permit.part.cs.PrintSpecialInfoTab --------------------");
            System.Diagnostics.Trace.WriteLine("\tId: " + this.Id);
        }
    }
}

SpecialPermit.cs

public partial class SpecialPermit : System.Windows.Forms.UserControl
{
    private void btnSave_Click (object sender, System.EventArgs e)
    {
        this.PrintSpecialInfo(); // SpecialPermit does not contain a definition for PrintSpecialInfo and no accessible extension method accepting a first argument of type SpecialPermit could be found
    }
}

【问题讨论】:

  • C#中不允许继承多个实现,所以不是多重继承。
  • 为什么SpecialPermit 定义在Premit 内部?通常你只会对包含类内部使用的私有类这样做。
  • @R.J.Dunnill 我认为您的意思是“类”,而不是“实现”,因为实现可能意味着您可以实现多个接口。
  • @R.J.Dunnill 你继承了一个类。你实现了一个接口。这就是为什么你的措辞令人困惑。
  • 我猜你必须将其他部分类嵌套在 Permit 的部分中?不确定这是否可行。我只是建议将SpecialPermit 拉出Permit

标签: c# multiple-inheritance partial-classes


【解决方案1】:

我认为这是您的“SpecialPermit”实际上是 2 种不同的“SpecialPermit”对象类型。 您不能只添加“部分”并期望名称空间交织在一起。 从技术上讲,第一个是NAMESPACE.Permit.SpecialPermit,另一个是NAMESPACE.SpecialPermit

此外,这两个对象都有一个超类这一事实表明它们并不相同。如评论中所述,C# 不允许多重继承。因此,除非“Permit”是“UserControl”,否则 SpecialPermit 的第二个定义会产生编译错误。

所以要回答,您无权访问该方法,因为它不在该对象中。

如果你想访问它,你需要确保你定义/扩展了同一个对象。您发布的代码定义了 2 种不同的“SpecialPermit”对象类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 2014-12-27
    • 2017-02-04
    相关资源
    最近更新 更多