gpt4 book ai didi

c# - 我可以在 C# 中创建使用未知类型参数声明方法的接口(interface)或抽象类吗?

转载 作者:行者123 更新时间:2023-11-30 13:42:43 24 4
gpt4 key购买 nike

我正在将 http GET 查询字符串解析为其组件。在尝试使其模块化(参数的数量和类型可能有很大差异)时,我想要一个 Parameter 抽象基类或接口(interface)来定义是否已设置属性,以及一个 Set 方法来设置值(value)。有没有办法使用 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 属性的原因是能够检查参数是否已设置,因为某些参数没有任何“安全”值,我肯定知道这些值不是有意传递的。如果未设置值,则会将默认值插入其中。

看着这个问题,我怀疑它是否可以按照我想要实现的方式处理,但是这个例子应该让我明白我想要做什么。

有没有关于如何最好地处理它的建议。如果有一种方便的设计模式或通用的方法,我不会感到惊讶,但我还没有设法用谷歌搜索。

我看到的选项是:

  • 不要使用继承,而是依赖约定来保持一致性。我很可能不需要通过列表迭代等方式来处理这些,但如果我找到了一种方法,它可能会带来一些新的想法或机会。
  • 使用一个对象参数,然后以某种方式执行一些 typeof() 和 switch 魔法,尽管这让我觉得非常丑陋,可以这么说,而且是非多态的。

还有其他想法吗? :)

最佳答案

你是否正在寻找这样的东西

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;
}
}

看看An Introduction to C# Generics

关于c# - 我可以在 C# 中创建使用未知类型参数声明方法的接口(interface)或抽象类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2310969/

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