接口方法

时间:2016-07-01 10:24:51

标签: c# winforms dynamic interface

我正在重写桌面解决方案,我有主根表单,其中包含应该可以被应用程序的其他元素访问的属性。

您可以使用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,它需要是公共的

1 个答案:

答案 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