【发布时间】:2018-03-26 14:52:43
【问题描述】:
我不确定如何去实现这个特殊的想法,我有一个类,我们称之为 EnhancedUserInput,它将有一些变量,所有输入类型都将具有一个特定的子类,具体取决于操作期间的需要,所以一些额外的变量和一个列表,例如它的子类将是 MultipleChoice,它将具有 MinSelection、MaxSelection 和一个名为 option 的类型列表以及它们自己的变量等,然后是另一个可能的子类,称为 ExplicitAgreement,它具有变量 inputLabel1、inputLabel2 和BinaryInput 类型的列表,该列表将具有自己的变量。
到目前为止,据我所知,最好的方法是拥有某种类型的泛型变量?我将展示一些代码来尝试帮助获得我需要的东西,但我只是想知道是否有一种我不知道的简单方法可以做到这一点?
public class EnhancedCustomerInput
{
public string Title { get; set;}
public bool ResponseOptional { get; set;}
public string CancelLabel { get; set;}
public string SubmitLabel { get; set}
// this is where I am unsure of how to go about it
public object inputType
{
MultipleChoice
ExplicitAgreement
}
}
public class MultipleChoice
{
public List<MultipleChoiceOption> Options { get; set; }
public int MinSelected { get; set; }
public int MaxSelected { get; set; }
}
public class ExplicitAgreement
{
public List<BinaryInputOption> Buttons { get; set; }
public string InputLabel1 { get; set; }
public string InputLabel2 { get; set; }
}
这个解决方案的最佳途径是什么?我能想到一些可能的方法,但它们有点虚,想知道是否有任何简单的方法?
【问题讨论】:
-
听起来你想使用Generics。输入类型应该是一个属性:
public T InputType {get; set;} -
输入类型可以有不同数量的变量这一事实是否会成为问题。例如,每当我尝试分配诸如 model.inputType.Options[0].add(Option) 与 model.inputType.Buttons[0].add(Button) 之类的东西时,IDE 是否会计算出不同的变量(只是想在我走这条路之前确定一下)
-
像“model.inputType.Buttons[0].add(Button)”这样的构造有一定的味道......泛型的一个更“老派”的替代品是接口......但让我们退后一步: 你想做什么?
-
我的意思是代码气味。这种结构的用户必须对数据结构了解太多。您最终会得到高度复杂、极难维护的代码。
-
是的,我确实觉得它会有点像丛林,所以想知道是否有更简单的解决方案来解决我目前的想法:/ .