C# 另一个问题中的stion要简单得多,如果您还没有自己理解我的最后一条评论,我会特别推荐它,因为这意味着您只是在复制您不理解的代码。但如果您喜欢这种方法,它会起作用。非泛型接口方法还允许您的模型类“清洗”不能简单地字符串化的结果:例如,如果结果是列表或枚举,
C# 另一个问题中的stion要简单得多,如果您还没有自己理解我的最后一条评论,我会特别推荐它,因为这意味着您只是在复制您不理解的代码。但如果您喜欢这种方法,它会起作用。非泛型接口方法还允许您的模型类“清洗”不能简单地字符串化的结果:例如,如果结果是列表或枚举,,c#,generics,interface,overriding,C#,Generics,Interface,Overriding,另一个问题中的stion要简单得多,如果您还没有自己理解我的最后一条评论,我会特别推荐它,因为这意味着您只是在复制您不理解的代码。但如果您喜欢这种方法,它会起作用。非泛型接口方法还允许您的模型类“清洗”不能简单地字符串化的结果:例如,如果结果是列表或枚举,非泛型结果重载可以返回String.Join(“,”,result)。但是你也可以在你的通用模型基类中添加一个方法来做同样的事情。我认为这是一个很好的答案,但是--“我相信这比一个完全通用的解决方案更容易理解。”--试图从公共接口IAddHan
另一个问题中的stion要简单得多,如果您还没有自己理解我的最后一条评论,我会特别推荐它,因为这意味着您只是在复制您不理解的代码。但如果您喜欢这种方法,它会起作用。非泛型接口方法还允许您的模型类“清洗”不能简单地字符串化的结果:例如,如果结果是列表或枚举,非泛型结果重载可以返回
String.Join(“,”,result)
。但是你也可以在你的通用模型基类中添加一个方法来做同样的事情。我认为这是一个很好的答案,但是--“我相信这比一个完全通用的解决方案更容易理解。”--试图从公共接口IAddHandler中破译公共类IntegerHandler:IAddHandler
,其中T:IModel
和公共类模型:IModel
并不明显。(一些评论可能会有所帮助)@BurnsBA OP考虑的解决方案是以某种方式将IAddHandler中的T约束为Model
——这必须是IAddHandler,其中T:Model
,因此类StringHandler:IAddHandler
,对于初学者来说,哪个IMO比非通用的IModel
接口更麻烦。这对我来说当然更麻烦。这对我来说不是什么大麻烦,但我已经做了一段时间了,OP没有。我认为这是一个很好的答案,但是--“我相信这比一个完全通用的解决方案更容易让你动脑。”--试图从公共接口IAddHandler中破译公共类IntegerHandler:IAddHandler
,其中T:IModel
和公共类模型:IModel
并不明显。(一些评论可能会有所帮助)@BurnsBA OP考虑的解决方案是以某种方式将IAddHandler中的T约束为Model
——这必须是IAddHandler,其中T:Model
,因此类StringHandler:IAddHandler
,对于初学者来说,哪个IMO比非通用的IModel
接口更麻烦。这对我来说当然更麻烦。这对我来说不是什么大麻烦,但我已经做了一段时间了,OP没有。
public class IntegerModel
{
public int A { get; set; }
public int B { get; set; }
public int C { get; set; }
}
public class StringModel
{
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
}
public interface IAddHandler<T>
{
T Add();
void GetData();
}
public class IntegerHandler : IAddHandler<IntegerModel>
{
public IntegerModel IntegerModel { get; set; }
public void GetData()
{
// Get Info to Add from external file for example
IntegerModel = new IntegerModel { A = 10, B = 20 };
}
public IntegerModel Add()
{
IntegerModel.C = IntegerModel.A + IntegerModel.B;
return IntegerModel;
}
}
public class StringHandler : IAddHandler<StringModel>
{
public StringModel StringModel { get; set; }
public void GetData()
{
// Get Info to Add from external file for example
StringModel = new StringModel { A = "10", B = "20" };
}
public StringModel Add()
{
StringModel.C = StringModel.A + StringModel.B;
return StringModel;
}
}
public static void Main(string[] args)
{
var integerHandler = new IntegerHandler();
var stringHandler = new StringHandler();
ValidateHandler(integerHandler);
ValidateHandler(stringHandler);
}
public static void ValidateHandler<T>(IAddHandler<T> handler)
{
handler.GetData();
var result = handler.Add();
WriteResults(result);
}
public static void WriteResults(StringModel model)
{
Console.WriteLine(model.C);
}
public static void WriteResults(IntegerModel model)
{
Console.WriteLine(model.C);
}
public static void ValidateHandler<T>(IAddHandler<T> handler)
{
handler.GetData();
var result = handler.Add();
if (typeof(T) == typeof(StringModel))
{
WriteResults(result as StringModel);
}
else if (typeof(T) == typeof(IntegerModel))
{
WriteResults(result as IntegerModel);
}
}