gpt4 book ai didi

c# - 多个自定义控件都使用相同的属性;接口(interface)是获取属性的最优雅方式吗?

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:57 25 4
gpt4 key购买 nike

我有多个自定义控件(继承自 TextBox、NumericUpDown 等),每个控件都有一个属性 MaxValue。

我遍历表单中所有自定义控件的列表,获取每个控件的 MaxValue,而不管控件的类型如何。

我可以遍历每种控件类型,查看给定控件是否属于该类型,将控件转换为该类型,并获取其 MaxValue。

if (aControl is ConfigTextBox) {maxValue = ((ConfigTextBox)aControl).MaxValue;}
if (aControl is ConfigNumericUpDown) {maxValue = ((ConfigNumericUpDown)aControl).MaxValue;}
etc...

不需要查看每种类型并在一行中完成会更清晰:

float maxValue = aControl.MaxValue;

我通过使用接口(interface)笨拙地解决了这个问题;该接口(interface)定义了获取每个自定义控件属性的方法。因此,每个自定义控件都必须为每个属性定义一个字段和一个方法。

这很丑。

(注意:方法在字段名后加下划线,以区分两者。)

界面:

interface ConfigControl
{
float MaxValue_();
...(more methods, one per property)
}

自定义控件之一:

public partial class ConfigTextBox : TextBox, ConfigControl
{
private float maxValue = 10;
....
// Maximum
[DefaultValueAttribute(10), Description("The maximum value that can be entered in this setting"), Category("Data")]
public float MaxValue
{
get { return maxValue; }
set { maxValue = value; }
}
public float MaxValue_() { return maxValue; }
.... (more properties)
}

另一个自定义控件:

public partial class ConfigNumericUpDown : NumericUpDown, ConfigControl
{
private float maxValue = 10;
....
// Maximum
[DefaultValueAttribute(10), Description("The maximum value that can be entered in this setting"), Category("Data")]
public float MaxValue
{
get { return maxValue; }
set { maxValue = value; }
}
public float MaxValue_() { return maxValue; }
.... (more properties)
}

获取最大值:

float maxValue = ((ConfigControl)aControl).MaxValue_();

我的问题:

  • 使用接口(interface)并通过方法获取属性是否是处理此问题的正确方法?
  • 有没有一种方法可以使用字段而不是方法来获取所有这些自定义控件实现的属性的值,而不必将每个控件强制转换为它自己的类型?

最佳答案

在我看来,您并不知道可以使用属性 getter 定义接口(interface):

interface ConfigControl
{
float MaxValue { get; }
}

如果您以这种方式定义接口(interface),那么实现该接口(interface)的任何类都必须至少具有 MaxValue 属性的 get 部分。由于您的所有自定义控件似乎都具有此属性,因此您不需要执行任何其他操作 - 不需要 MaxValue_() 方法。

关于c# - 多个自定义控件都使用相同的属性;接口(interface)是获取属性的最优雅方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25021641/

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