.Net未定义的对象类型[已关闭]

pkmbmrz7  于 2022-11-19  发布在  .NET
关注(0)|答案(1)|浏览(149)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

6个月前关闭。
Improve this question
在我的模型中一定有一个未知类型的属性,因为我需要根据从数据库中检索到的字符串数据,在我生成模型后定义这个属性应该是哪个类。我这样做了,但是我无法访问其中的方法,因为我后来定义了对象,而且它没有静态类型。我应该如何处理这个问题?最有效的解决方案是什么?
我的.Net Freamwork Windows服务

foreach (var item in devices)
{
    Thread th = new Thread(item.Driver.Start); // in this block i cant go to Start method in the driver
}

My .Net核心工作进程服务

foreach (var item in devices)
{
    Thread th = new Thread(item.Driver.Start); // in this block i cant go to Start method in the driver
}

正如你所看到的,这两个项目是完全一样的。当我使用.net framework开发windows服务时,线程运行得非常快。但是.net核心和工作者服务的线程并不能以同样的性能工作。
Not:我的驱动程序类使用一些TCP请求和mysql记录。

cgh8pdjw

cgh8pdjw1#

这就是抽象的意义所在。你应该创建一个接口,例如IDriver,然后你可以创建多个继承该接口的类。在接口中,你可以声明继承类必须实现的方法。然后你可以简单地将Driver字段类型从object更改为IDriver。老实说,你的问题在编程中是很常见的,你可以查找设计模式--它会帮助你很多,相信我。我是一个自动化工程师,我知道你想达到什么目的。当您的设备必须兼容Profibus而不是Modbus时,您会怎么做?CANopen和EtherCAT会怎么做?
记住让你的接口尽可能的小。不要在你必须实现只适合一种类型的对象的方法的地方构建接口。例如,您不希望创建IPrinter,因为也有集成了扫描仪的打印机,如果IPrinter必须实现打印和扫描方法,那就不好了,因为这会迫使所有打印机都实现扫描方法。相反,你应该创建IPrinterIScanner作为单独的接口,即使它们只有一个方法。然后你可以从IPrinter继承那些代表打印机的类,而不代表扫描仪,你可以简单地从这两个接口继承!就这么简单!
设计模式和固体是你的好朋友,这些将保存你很多时间。
保持下去!我经历了这一切,我搞砸了我的SCADA完全相同的方式,因为我缺乏知识。
随时问我任何问题:)

相关问题