“没有给出与所需形式参数相对应的参数”-尝试测试OOP继承时[重复]
Posted
技术标签:
【中文标题】“没有给出与所需形式参数相对应的参数”-尝试测试OOP继承时[重复]【英文标题】:"There is no argument given that corresponds to the required formal parameter" - when trying to test OOP Inheritance [duplicate] 【发布时间】:2020-08-20 13:25:57 【问题描述】:我只是想了解继承在 C# 中是如何工作的。 (虽然我觉得我懂了,但我还是想尝试做一些实际的事情来理解)
所以我一直在尝试创建一个具有属性和构造函数的类以及另一个继承这个类的类。但我得到一个错误,我似乎不明白为什么。
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApp2
public class Test
public int testing get;
public Test(int p)
this.testing = p;
public class Test2 : Test
There is no argument given that corresponds to the required formal parameter 'p' of 'Test.Test(int)' for line 15
有人可以帮助我了解发生了什么以及为什么会出现该错误吗?谢谢。
【问题讨论】:
什么时候出现这个错误?您是否正在尝试创建 Test2 的实例 @PrateekKumarDalbehera:不,由于Test2
的隐式构造函数,这段代码会产生错误。
谢谢@jonskeet,是的,你是绝对正确的——C#之神????
【参考方案1】:
TL;DR:构造函数不是继承的。
更长的解释:您的Test2
类隐式有一个这样的构造函数:
public Test2() : base()
...因为您还没有在Test2
中声明任何构造函数。如果您在Test2
中声明any 构造函数,编译器将不会尝试提供隐式构造函数。 (不过,您的构造函数需要调用 base(...)
为 p
提供值。
所以你可能想要:
public class Test2 : Test
public Test2(int p) : base(p)
【讨论】:
我有 2 个问题,如果你不介意的话,因为这些都是非常愚蠢的问题(我真的是个菜鸟):为什么我需要一个构造函数(这个类不能存在吗?必须要有构造函数吗?)以及 base() 是如何工作的(它的作用是什么?)? @JohnSmith:是的,必须有一个构造函数,除非它是一个静态类(在这种情况下它不能从任何东西继承)。如果不能创建实例,继承就没有意义。至于base
的用途,请参阅docs.microsoft.com/en-us/dotnet/csharp/language-reference/…。 (这真的不是可以在评论中解释的东西。)
非常感谢。我真的很感谢你的努力。我会尽快接受你的回答。
嘿,我还在研究这个例子,但我无法真正理解发生了什么。什么是 base(p) 调用?我一直在看那个页面,但我仍然无法弄清楚。 base(p) 是在调用 Test 的构造函数吗?
@JohnSmith:它链接到基类中的构造函数。这是顶部的第二个项目符号:“指定在创建派生类的实例时应调用哪个基类构造函数。”以上是关于“没有给出与所需形式参数相对应的参数”-尝试测试OOP继承时[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Asp.net Boilerplate - 没有给出与所需形式参数相对应的参数