【发布时间】:2022-01-20 06:03:45
【问题描述】:
所以我正在编写一个 C# System.Commandline 应用程序,并且我注意到我的方法都遵循类似的结构 - 每个 Handler 类都有一个公共方法 RunHandlerAndReturnExitCode,采用一组不同的选项,我已经封装到一个类中作为参数传递。如下:
public class FirstHandler
{
public int RunHandlerAndReturnExitCode(FirstOptions options) { }
}
public class SecondHandler
{
public int RunHandlerAndReturnExitCode(SecondOptions options) { }
}
等等。我尝试创建一个 OptionsBase 抽象类,并让我的其他 Options 类从它继承,然后创建了一个处理程序接口,如下所示:
internal interface IHandler
{
int RunHandlerAndReturnExitCode<T>(T options) where T : OptionsBase;
}
处理程序看起来像:
public class FirstHandler : IHandler
{
public int RunHandlerAndReturnExitCode<FirstOptions>(FirstOptions options) { }
}
编辑:我还有从 OptionsBase 继承的 Options 类:
public class FirstOptions : OptionsBase
{
public string FirstProperty { get; set; }
}
还有 OptionsBase 类:
public abstract class OptionsBase { }
但这会返回错误“类型参数 'FirstOptions' 的约束必须与类型参数 T 的约束匹配。(请考虑改用显式接口实现)。
我哪里错了?这甚至是正确的方法吗?
【问题讨论】:
-
FirstOptions必须继承OptionsBase。 -
抱歉,确实会增加我原来的问题
-
似乎您还必须在方法上添加约束。
public int RunHandlerAndReturnExitCode<FirstOptions>(FirstOptions options) where FirstOptions : OptionsBase { return 0; } -
看你的
OptionsBase是什么,放在描述里 -
@TornikeCholadze 已经添加了它
标签: c# .net inheritance object-oriented-analysis