我有一个小问题。我在一个框架中有一个应用程序监视部分,供多个应用程序使用。
现在我有这样的功能:
public enum Vars
{
CPU,
RAM
}
public void Add(Vars variable, object value)
{
[...]
}
在Add方法中用作参数的变量将用作数据库中条目的名称。 现在我得到了要求,应用程序可以在框架外指定自己的变量。因为你不能从枚举继承,这会导致一些麻烦。
我基本上看到了解决这个问题的两种可能性(我认为机器人不太满意)。
可能性1:
public void Add(enum variable, object value)
此方法可以接受各种枚举,因此用户可以使用Vars枚举以及他们自己定义的枚举。这个解决方案的问题是:用户可以在应用程序和框架中使用相同的名称。我无法区分具有值“CPU”的两个枚举(Framework可能将百分比值存储为“CPU”,应用程序可能将进程CPU使用存储为“CPU”)。
可能性2:
第二种方法是类而不是枚举,类似于:
public class Vars
{
public const string CPU = "CPU";
public const string RAM = "RAM";
}
这里的缺点: 1.写更多内容。 2.我必须将参数定义为字符串:
public void Add(string variable, object value);
这也可能导致错误使用(直接添加字符串而不是定义继承自Vars的类的应用程序。)
关于如何定义模型的任何想法:
答案 0 :(得分:3)
上下文并不完全清楚,但是如何创建一个类
public class Vars
{
public static Vars CPU = Vars.Get("CPU", 1);
public static Vars RAM = Vars.Get("RAM", 2);
//You can keep one of the params, name or id
private Vars(string name, int id)
{
...
}
public static Vars Get(string name, int id)
{
//check if id or name exists in static dictionary, and return that instance or create new one
}
}
public void Add(Vars variable, object value);
现在用户可以创建任何类型的参数并传递给方法
Vars newVar = Vars.Get("MyNewParam", 10);
您可以轻松检查传递的参数是否为您知道的
如果参数相同,则Get方法返回相同的实例