gpt4 book ai didi

c# - 接口(interface)继承问题

转载 作者:行者123 更新时间:2023-11-30 19:55:39 24 4
gpt4 key购买 nike

我有 IServiceHandler 和一个 ISalesHandler 并且都继承自 Ihandler

IHandler.cs

public interface IHandler
{
Task AddAsync(IEnumerable<IDictionary<string, object>> toAdd, int dataFileId);
Task AddAuditAsync(IEnumerable<IDictionary<string, object>> toAdd, int dataFileId);
}

IServiceHandler.cs

public interface IServiceHandler : IHandler
{
Task<IEnumerable<ACService>> GetAsync();
Task<IEnumerable<ACServiceAudit>> GetAuditAsync();
}

ISalesHandler.cs

public interface ISalesHandler : IHandler
{
Task<IEnumerable<ACSale>> GetAsync();
Task<IEnumerable<ACSaleAudit>> GetAuditAsync();
}

然后我有一个返回 Sales 或 Service 的方法,但问题是我将它作为 IHandler

返回
private IHandler CreateHandler(FileType type)
{
switch (type)
{
case FileType.Sales:
return _container.GetExportedValue<ISalesHandler>("Sales");
case FileType.Service:
return _container.GetExportedValue<IServiceHandler>("Service");
case FileType.None:
return null;
}
return null;
}

这导致我只能访问 IHandler 中的方法,而不是 IServiceHandlerISalesHandler 中的方法。

如何构造接口(interface)以便我可以访问所有方法?我宁愿保留 CreateHandler 方法。

最佳答案

实际上,您正在返回一个 IHandler,因此无需强制转换即可访问那里定义的方法。

我认为可以通过使用泛型来规避这一切,因为在派生处理程序中似乎存在一种模式。

这对你有用吗?

IHandler.cs:

public interface IHandler // I usually split the generic and non-generic methods
{
Task AddAsync(IEnumerable<IDictionary<string, object>> toAdd, int dataFileId);
Task AddAuditAsync(IEnumerable<IDictionary<string, object>> toAdd, int dataFileId);
}

public interface IHandler<TService, TServiceAudit> : IHandler
{
Task<IEnumerable<TService>> GetAsync();
Task<IEnumerable<TServiceAudit>> GetAuditAsync();
}

IServiceHandler.cs:

public interface IServiceHandler : IHandler<ACService, ACServiceAudit>
{ }

ISalesHandler.cs:

public interface ISalesHandler : IHandler<ACSale, ACSaleAudit>
{ }

关于c# - 接口(interface)继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36568236/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com