You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Framework 4.8中如何用接口泛化不同构造参数的类构造器

.NET Framework 4.8 方法泛化实现方案

可以实现泛化,但你设想的直接通过接口实例化的思路不可行——C#接口无法定义构造函数,没法直接通过接口类型创建对象。不过有两种实用方案可以达成泛化目的:

方案一:用委托封装实例化逻辑

先定义统一接口,让Class1和Class2实现该接口:

public interface IClass
{
    // 在此添加两个类共有的方法/属性,方便后续统一操作
}

public class Class1 : IClass
{
    public Class1(string entry, int length)
    {
        // 构造逻辑
    }
}

public class Class2 : IClass
{
    public Class2(string entry)
    {
        // 构造逻辑
    }
}

实现泛化方法,通过Func<string, IClass>委托接收不同的实例化逻辑:

private void ReadFilesCommon(List<string> input, Func<string, IClass> instanceFactory)
{
    foreach (string entry in input)
    {
        IClass instance = instanceFactory(entry);
        // 此处可对所有IClass实例执行统一操作
    }
}

调用时传入对应类的实例化逻辑:

// 处理Class1场景
ReadFilesCommon(inputList, entry => new Class1(entry, entry.Length));
// 处理Class2场景
ReadFilesCommon(inputList, entry => new Class2(entry));

方案二:使用工厂模式

如果偏好基于接口的设计,可定义工厂接口并为每个类实现对应工厂:

public interface IClassFactory
{
    IClass Create(string entry);
}

public class Class1Factory : IClassFactory
{
    public IClass Create(string entry)
    {
        return new Class1(entry, entry.Length);
    }
}

public class Class2Factory : IClassFactory
{
    public IClass Create(string entry)
    {
        return new Class2(entry);
    }
}

泛化方法改为接收工厂接口:

private void ReadFilesCommon(List<string> input, IClassFactory factory)
{
    foreach (string entry in input)
    {
        IClass instance = factory.Create(entry);
        // 统一操作IClass实例
    }
}

调用时传入对应工厂实例:

ReadFilesCommon(inputList, new Class1Factory());
ReadFilesCommon(inputList, new Class2Factory());

这两种方案都能抽离重复的遍历逻辑,同时适配两个类构造参数不同的情况。

内容的提问来源于stack exchange,提问作者Filipe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 21:50:17