我正在将http GET查询字符串解析为其组件。在尝试使其模块化(参数的数量和类型可以变化很大)时,我希望有一个参数抽象基类或接口来定义是否已设置属性,以及设置方法的Set方法值。有没有办法用Set方法的变量参数类型做到这一点?
总体思路如下:
public abstract class Parameter
{
public bool IsSet { get; protected set; }
protected Parameter() { IsSet = false; }
public abstract void Set( --unknown type here-- );
}
示例参数child将类似于:
public class IntParameter : Parameter
{
public int Value { get; protected set; }
public void Set(int value)
{
Value = value;
IsSet = true;
}
}
使用这种结构,我可以将每个查询参数抛入其适当的强类型类中,但仍然确保所有这些都是一致的。 IsSet属性的原因是能够检查参数是否已设置,因为某些参数没有任何“安全”值,我肯定不会故意传递这些值。如果没有设置一个值,那么它会得到一个默认值。
看看这个问题,我怀疑它可以被处理,因为我想要实现它,但是这个例子应该让我知道我希望能做什么。
有没有关于如何最好地处理它的建议。如果有一个方便的设计模式或常见的方式,我不会感到惊讶,但我还没有设法谷歌。
我看到的选项是:
还有其他想法吗? :)
答案 0 :(得分:10)
你是否正在寻找类似的东西
public abstract class Parameter<T>
{
public bool IsSet { get; protected set; }
protected Parameter() { IsSet = false; }
public abstract void Set(T value);
public T Value;
}
public class IntParameter : Parameter<int>
{
public override void Set(int value)
{
Value = value;
IsSet = true;
}
}