c# - 将任何模型类传递给通用方法 C#
问题描述
所以,我想创建一个接口,它有一个可以接受任何模型类的方法。例如
我有这三个属性类
class A
{
public long id { get; set; }
public string description { get; set; }
public string code { get; set; }
}
class B
{
public long someID { get; set; }
}
class C
{
public long anydesign { get; set; }
}
class D
{
public long Router { get; set; }
}
我有一个界面
public interface IModel
{
void Dosomething(A model); // Now in this example it takes the A model,But I want it to be set, so that that class that implements the interface can put any model as required
}
现在,我有一个实现模式的类由于接口只接受A模型,我可以在实现时在类中传入A模型
public class ImplemenationA: IModel
{
public void Dosomething(A model)
{
Console.WriteLine(model.description);
}
}
假设我有另一个实现类现在,我猜下面的一个不会工作,因为接口签名只强制采用模型 A 而不是任何其他模型
public class ImplementationB:IModel
{
public void Dosomething(B model)
{
Console.WriteLine(model.someID);
}
}
我希望接口方法被任何实现类调用并使用任何模型
解决方案
虽然您尝试做的事情是不合理的...回答实际问题,但可以使用泛型...
采取以下指导(和示例)...
class Test : IJobTask
{
public void Start(string val = "")
{
throw new NotImplementedException();
}
}
public interface ITest
{
void MyMethod<T>(T model) where T : IJobTask;
}
public class ConcreteTest : ITest
{
public void MyMethod<T>(T model) where T : IJobTask
{
}
}
public class Main
{
public Main()
{
var ct = new ConcreteTest();
ct.MyMethod(new Test());
}
}
您现在MyMethod
需要执行检查和强制转换,哪种方式违背了目的,但这确实回答了“接受任何模型的方法”的问题
推荐阅读
- amazon-sagemaker - 如何在 Java 中调用 sagemaker 推理端点?
- java - 在实体对象中创建服务层的新实例是否正确?
- r - 带有矩形阴影的情节
- ios - 在 iOS qbs 项目中包含 AVFoundation
- mysql - 如何在没有数据库名称的情况下使用 datagrip 进行 mysql_dump?
- c# - 为什么 HttpClient.GetAsync() 缺少部分内容?
- audio - 通过代码创建简单的声音,例如 8 位
- css - 降低 Woocommerce Storefront 主题页脚高度
- jenkins - 带有詹金斯作业参数的 Slack Slash 命令
- javascript - 使用 Javascript 将日期验证为必填字段