我正在重写桌面解决方案,我有主根表单,其中包含应该可以被应用程序的其他元素访问的属性。
您可以使用Interface方法获取属性,也可以将Form作为动态对象获取并查询属性。下面的代码示例。
基于界面的方法
public interface IUersInterfaceMainScreenGet
{
dynamic GetClientDetails();
}
表单interface-implementation看起来像这样:
public dynamic GetClientDetails()
{
return currentClients;
}
调用界面
var mainScreen = (InterfaceProject.IUersInterfaceMainScreenGet)System.Windows.Forms.Application.OpenForms["mainScreenForm"];
return mainScreen.GetLastBodyPluginFormName();
基于动态的appraoch
dynamic form = Application.OpenForms["MainScreenForm"];
form.currentClients
两个实例都需要获取当前的Active表单,但是哪一次在内存使用方面最好?
使用界面,我想获得的属性可以是私有的,但对于Dynamic,它需要是公共的
答案 0 :(得分:2)
你的问题很难理解。但是我猜你的意思。
当您拥有界面时,您可以通过名为GetClientDetails
的方法获取客户详细信息。在表单上,它的实现只返回私有字段(不是属性)currentClients
。
通常最好知道你处理的类型,因此使用接口是一个好主意,因为你可以对可以访问的内容进行编译时检查。在您的情况下,您知道从Forms.Application.OpenForms["mainScreenForm"]
返回的对象有一个访问客户端详细信息的方法。当仅使用dynamic
时,您根本不了解所包含的对象,您可以使用它来所有 - 而大多数将在运行时中失败。但是你为什么要抛弃已经拥有的知识?
所以我的基本建议是:总是使用强类型接口。只有在很少的情况下,您实际上可能需要 dynamic
。
关于内存占用,两种解决方案之间没有区别。重要的是实际实例的内存,无论您如何访问数据,都是相同的。所以在这两种情况下都需要一个字段。唯一的区别是你访问该字段的方式,一次直接发生(dynamic
),并通过调用方法访问它。
所以关于内存占用的以下两个陈述没有区别:
var form = (IUersInterfaceMainScreenGet)Application.OpenForms["mainScreenForm"];
return form.GetClientDetails();
和
dynamic form = Application.OpenForms["MainScreenForm"];
return form.currentClients