【问题标题】:Can I use a derived class function if base class is called as parameter?如果基类被称为参数,我可以使用派生类函数吗?
【发布时间】:2021-06-28 21:51:00
【问题描述】:

我有一个以public MyClass(Form form) 作为构造函数的类

我可以在这个类中使用我在派生自Form 的类中创建的函数吗?(命名为DerivedClass

现在我在想,检查form 是否为DerivedClass 然后使用它的功能,但它似乎不起作用。

if (form is DerivedClass)
{
    form.DerivedClassFunction();
}

这样做我得到同样的错误:

“Form”不包含“DerivedClassFunction”的定义

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-messages/cs1061?f1url=%3FappId%3Droslyn%26k%3Dk(CS1061)

【问题讨论】:

  • 您需要转换为真实类型:((Derived)form).DerivedClassFunction();。或者简单地使用它:(form as Derived)?.DerivedClassFunction(); ...
  • if (form is Derived derived) { derived.DerivedClassFunction(); }
  • 虽然上述建议有效,但您应该重新考虑您的设计。通常,基类不知道 - 也不需要 - 任何事情 可能的派生类。
  • 投票有点不可预测:不要担心孤立的一两次投票。请注意,您的问题不包含minimal reproducible example - 我无法直接粘贴到例如dotnetfiddle.net,看看你的问题
  • 我想回应@HimBromBeere 上面所说的内容。任何时候你必须这样做都会产生巨大的代码气味 - 请重新考虑你的方法。

标签: c#


【解决方案1】:

您必须通过以下方式将其转换为派生类型:

if (form is Derived)
{
    ((Derived)form).DerivedClassFunction();
}

或(C# 7 中的新功能):

if (form is Derived derived)
{
    derived.DerivedClassFunction();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-14
    • 2017-08-13
    • 2018-08-04
    • 2017-10-31
    • 2021-07-02
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    相关资源
    最近更新 更多