目前,我正在尝试实现创建类型的系统或方法,但是在创建时还要获取类型名称。

假设我有类似的操作,可以由应用程序的用户创建:

Blur
Contrast
Sharpen
Diffuse
Invert
...


因此,当通过UI创建它们时,应该如何提取它们的名称。假设您每个都有单独的UI按钮。每次创建其中一个时,它们都必须被命名为Blur01Blur02,...。

因此,当前它们具有必须在创建时设置的.Name属性。但是我也不想在每个类中重复代码来设置名称。

我应该使用哪种设计模式?

最佳答案

如果您希望每种类型都有自己的唯一增量器,则将有重复的代码。通过将静态字典保存在具有Type和int的基类中,可以通过反射来避免这种情况,如下所示:

private static Dictionary<Type,int> nameSuffixCounters =
     new Dictionary<Type,int>();

public string CreateName()
{
    Type type = this.GetType();
    return string.Format("{0}{1}",type.Name, this.GetNextAndIncrement(type));
}

private int GetNextAndIncrement(Type type)
{
    int current;
    if (!this.nameSuffixCounters.TryGetValue(type, out current))
    {
        current = 0;
    }
    nameSuffixCounters[type] = ++current;
    return current;
}


像这样的东西会摆脱重复的代码,但是在基类中使用反射会增加一些复杂性……

关于c# - 解决此问题的最佳设计模式是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/762103/

10-17 02:37