【问题标题】:How to Inherit from ControlCollection in C#如何从 C# 中的 ControlCollection 继承
【发布时间】:2019-10-28 13:59:55
【问题描述】:

我在 VB.net 中有以下代码,需要将其转换为 C#...

Public Class SearchableCollection
    Inherits ControlCollection

    Public Sub New(owner As Control)

    End Sub
End Class

当我将它转换为 c# 时,我收到错误“没有给定的参数与所需的形参所有者相对应”。

public class SearchableCollection : ControlCollection {
    public SearchableControlCollection(Control owner){

    }
}

有什么想法吗?

【问题讨论】:

  • 不应该是public SearchableCollection(Control owner){ ... }吗?不是SearchableControlCollection
  • 在 vb.net 中,您使用 MyBase(owner) 作为声明,但在 C# 中,您必须在声明中这样做: public SearchableCollection(Control owner) : base(owner) { ... }

标签: c# vb.net winforms


【解决方案1】:

您的代码有几个小问题:

  1. 您已将构造函数命名为SearchableControlCollection。该名称必须与类名 SearchableCollection 匹配。
  2. 您必须将owner 传递给ControlCollection 的基类构造函数。添加: base(owner) 将参数传递给父构造函数。

这是工作代码:

public class SearchableCollection : ControlCollection
{
    public SearchableCollection(Control owner)
        : base(owner)
    {

    }
}

【讨论】:

  • 我建议最好更改类的名称以匹配构造函数,而不是相反。 SearchableControlCollection 是一个比 SearchableCollection 更合适的名称,因为该集合专门用于控件。
  • @jmcilhinney 这是一个非常好的观点,必须承认我认为 OP 的类名与他们预期的一样
  • 你可能是对的,但评论更多地指向 OP 而不是你。 C# 代码中的类名与它们在 VB 代码中显示的名称相匹配,但我认为这从一开始就是一个不合适的名称。
  • @jmcilhinney 基类在其名称中包含Control,但它在派生类中已被删除,同时仍是具体的 Control 集合。当然SearchableControlCollection 是一个高级名称。
  • 我很抱歉...我在 SO questjion 中输入错误的构造函数名称...在原始代码中是正确的。我忘记了基础(所有者)部分。
猜你喜欢
  • 2023-02-09
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2018-03-10
相关资源
最近更新 更多