Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 现有控件的新功能设计_C#_.net_Design Patterns_Decorator - Fatal编程技术网

C# 现有控件的新功能设计

C# 现有控件的新功能设计,c#,.net,design-patterns,decorator,C#,.net,Design Patterns,Decorator,伙计们 我需要建议。。。我想实现“向网格视图添加新项”和“从同一网格中删除选定项”,如添加(IEnumerable newItems) 我不想实现派生的网格视图类,因为我寻求的是与网格没有强关系的灵活解决方案 在我的案例中,我正在研究“Decorator”模式的使用,但我无法设计它:Decorator可以包含/聚合网格视图(这不是问题),但Decorator和网格视图没有公共接口,即“添加新项”是新功能,而网格视图没有。 我可以在网格视图中实现空的“Add”方法,并将其包装在decorator中

伙计们

我需要建议。。。我想实现“向网格视图添加新项”和“从同一网格中删除选定项”,如添加(IEnumerable newItems)

我不想实现派生的网格视图类,因为我寻求的是与网格没有强关系的灵活解决方案

在我的案例中,我正在研究“Decorator”模式的使用,但我无法设计它:Decorator可以包含/聚合网格视图(这不是问题),但Decorator和网格视图没有公共接口,即“添加新项”是新功能,而网格视图没有。 我可以在网格视图中实现空的“Add”方法,并将其包装在decorator中(作为替代方法)


无论如何,我会很高兴有任何想法来设计好的解决方案:)

我认为最简单的方法是扩展方法:

public static class GridViewExtensions
{
   public static void RemoveSelectedItems(this GridView grid)
   {
      // implementation goes here
   }

   public static void Add<T>(this GridView grid, IEnumerable<T> items)
   {
      // implementation goes here
   }
}
使用Decorator,您必须实现装饰对象的所有公共接口,并将调用转移到它。对于GridView,这是一项大量的工作


更新:另一个解决方案-只需从GridView继承并将您的方法添加到派生类。使用CustomGridView而不是GridView。

我认为最简单的方法是扩展方法:

public static class GridViewExtensions
{
   public static void RemoveSelectedItems(this GridView grid)
   {
      // implementation goes here
   }

   public static void Add<T>(this GridView grid, IEnumerable<T> items)
   {
      // implementation goes here
   }
}
使用Decorator,您必须实现装饰对象的所有公共接口,并将调用转移到它。对于GridView,这是一项大量的工作

更新:另一个解决方案-只需从GridView继承并将您的方法添加到派生类。使用CustomGridView而不是GridView。

A似乎非常适合解决您的问题

它表示要对对象的元素执行的操作 结构。Visitor允许您定义新操作,而无需更改 它操作的元素的类

A似乎很适合你的问题

它表示要对对象的元素执行的操作 结构。Visitor允许您定义新操作,而无需更改 它操作的元素的类


是的,这是最简单的。。。但我需要依赖于新功能的存储状态。。在这种情况下,扩展对我没有帮助。添加和删除项目的状态?对不起,我不解释上面的问题。我不怕工作:)真的,我想设计好的解决方案。。。我想我不是第一个应该实施类似问题的人。是的,这是最简单的。。。但我需要依赖于新功能的存储状态。。在这种情况下,扩展对我没有帮助。添加和删除项目的状态?对不起,我不解释上面的问题。我不怕工作:)真的,我想设计好的解决方案。。。我想我不是第一个应该实施类似问题的人。我喜欢:)我正在尝试实施这个nowoleksii,你能补充一下答案吗?我接受。只是补充了一个小的答案。Tnx!我喜欢:)我正在尝试实现这个nowoleksii,你能补充一下答案吗?我接受。只是补充了一个小的答案。Tnx!