gpt4 book ai didi

c# - 如何将行为移到单独的类中

转载 作者:行者123 更新时间:2023-12-03 10:46:34 24 4
gpt4 key购买 nike

我是设计模式的新手,我一直在努力找出如何将策略,装饰器或访客模式应用于我的问题。

我有一个WPF MVVM对话框,用于捕获Letter文档信息。
该表格具有以下内容:

  • 一组收件人联系人
  • 发件人1联系人
  • 发件人2联系人
  • CC联系人的一组
  • BCC联系人的一组

  • 我为上述项目使用了3个用户控件,因为每个控件捕获的信息略有不同:
  • 收件人
  • 发件人
  • CC(由BCC使用)

  • 我只有一个Contact类,每个ViewModel捕获的信息略有不同。不同之处在于收件人/CC具有“多次联系人”行为,而发件人/CC具有“收藏联系人”行为。

    目前,我的逻辑是重复的,我正在尝试使其更具可维护性。

    当我研究策略和装饰器模式时,父类(super class)包含有关每种行为的信息。是否可以仅将行为添加到具体实现中而不添加到父类(super class)中?

    最佳答案

    您可以使用extension methods向不带继承的具体类型“添加”行为,具体取决于您需要添加的功能类型。

    例如,假设您有一个名为MyConcreteClass的类,如下所示:

    public class MyConcreteClass
    {
    public string PropertyOne { get; set; }
    public void MethodOne { ... }
    }

    然后,您可以创建一个单独的扩展类,该扩展类允许您添加功能而无需修改原始实现。
    namespace Extensions
    {
    public static class MyConcreteClassExtensions
    {
    public static string MethodTwo(this MyConcreteClass concreteClass)
    {
    // add new implementation here
    return concreteClass.PropertyOne + " using extensions";
    }
    }
    }

    然后您可以简单地使用如下:
    var c = new MyConcreteClass();
    Console.WriteLine(c.MethodTwo());

    有关更多信息,请参见 here

    关于c# - 如何将行为移到单独的类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23775404/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com