【C#】不包含采用“0”个参数的构造函数

本文介绍如何在 C# 中正确地使用构造函数进行类的继承,特别是当子类需要调用带有参数的基类构造函数时的具体实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自百度:

就是说要从GClass7继承的话,必须为GClass58添加自定义的构造函数,而不是默认构造函数,并将必须的实参传入基类GClass7的有参数的构造函数,你可以转到GClass7的定义处,先看它提供的构造函数然后为GClass58写一个类似这样的构造函数:
public GClass58(int param1, int param2)  : base(param1)
//其中param1作为参数传入基类GClass7的构造函数中

 

以下为本人经历:

错误:



修改后:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication5
{
    public partial class ManagerForm : TimecardForm //
    {
        public ManagerForm(string usern): base(usern)
        {
            InitializeComponent();
        }
        private void button3_Click(object sender, EventArgs e)
        {
        }
    }
}
<think>好的,我现在要解决用户在使用C#的CsvReader时遇到的编译错误,具体是“CS1729:CsvReader包含两个参数构造函数”。首先,我需要了解这个错误的原因。CS1729通常意味着尝试调用的构造函数存在,参数数量或类型匹配。用户可能在使用某个库的CsvReader时传入了两个参数,但该版本的CsvReader并没有这样的构造函数。 接下来,我需要考虑用户可能使用的库。常见的C# CSV解析库有CsvHelper、FileHelpers等。假设用户使用的是CsvHelper,因为它的CsvReader类在旧版本中可能需要同的初始化方式。比如,在旧版本中,CsvReader可能通过传入TextReader和Configuration来实例化,而新版本可能有所变化。例如,新版本可能将配置移到了构造函数参数之后,或者改为使用无参构造函数配合配置对象。 接下来,我需要验证这个假设。查阅CsvHelper的文档,发现新版本(如v30.0.0之后)的CsvReader构造函数确实发生了变化。旧版本可能需要传入TextReader和CsvConfiguration,而新版本可能只需要TextReader,配置通过其他方式设置。例如,用户可能升级了库版本,导致原来的构造函数再适用,从而引发错误。 然后,思考解决方案。用户需要调整构造函数参数。如果使用的是旧版本,可能需要检查参数顺序或配置方式。例如,使用无参构造函数并单独设置配置属性。或者,如果用户代码是使用new CsvReader(reader, configuration),而新版本中构造函数只需要reader,配置通过其他方式传入,比如通过上下文(CsvContext)或配置对象。 另外,用户提到需要无参构造函数的替代方案。这可能意味着他们无法直接实例化CsvReader,或者需要依赖注入等场景。此时,可以考虑使用工厂方法、依赖注入容器,或者查看库是否提供了其他初始化方式,比如通过CsvConfiguration对象来配置,而是通过构造函数参数。 还需要考虑用户代码的具体情况。例如,用户是否在创建CsvReader时传入了两个参数,而实际可用的构造函数只有一个参数。这时,解决方案就是移除多余的参数,或者在正确的位置设置配置。比如,将配置通过CsvReader的Context属性设置,而是在构造函数中传递。 另外,参考用户提供的引用内容,特别是引用[1]中的#error和#warning指令,可能用户在编译时遇到了版本兼容的问题。比如,某些代码只在特定版本下有效,而用户可能没有正确使用条件编译指令,导致调用了存在的构造函数。需要检查代码中是否有条件编译的部分,确保使用的构造函数与当前库版本匹配。 最后,总结可能的解决方案:检查使用的CsvHelper库版本,查看对应版本的构造函数文档,调整参数数量或配置方式,使用正确的初始化方法。如果用户无法修改库版本,可能需要寻找替代的构造函数或使用同的库。</think>在C#中使用CsvReader时遇到"CS1729: 含两个参数构造函数"错误,通常由以下原因及解决方案构成: ### 错误分析 1. **库版本差异**:CsvHelper库同版本的构造函数参数同(如v30+版本简化了构造函数)[^3] 2. **配置方式变更**:新版本通过`CsvConfiguration`对象而非构造函数参数传递配置 3. **依赖注入需求**:需要无参构造函数实现依赖注入容器兼容 ### 解决方案 #### 方案1:适配新版本构造函数 ```csharp using (var reader = new StreamReader("data.csv")) using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) { // 通过上下文配置参数 csv.Context.RegisterClassMap<MyClassMap>(); var records = csv.GetRecords<MyClass>(); } ``` #### 方案2:无参构造函数+属性配置 ```csharp var configuration = new CsvConfiguration(CultureInfo.InvariantCulture) { HasHeaderRecord = true, Delimiter = ";" }; using (var csv = new CsvReader(reader, configuration)) { // 读取操作 } ``` #### 方案3:工厂模式封装 ```csharp public class CsvReaderFactory { public static CsvReader Create(TextReader reader) { return new CsvReader(reader, new CsvConfiguration(CultureInfo.InvariantCulture) { MissingFieldFound = null }); } } ``` ### 版本兼容建议 ```csharp #if CSVHELPER_30 var csv = new CsvReader(reader, CultureInfo.InvariantCulture); #else var csv = new CsvReader(reader, new CsvConfiguration(CultureInfo.InvariantCulture)); #endif ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值