我创建了一个用户控件,它有两个属性
其中Type
是枚举,
public enum Type { XType , YType }
且Parameter
的类型为String
现在,我需要将Parameter
更改为枚举。我确信每个Type
都有两个参数。
是XTypeFoo, XTypeBar, YTypeFoo, YTypeBar
。
之前,我将Parameter
保留为String
属性。现在我为此创建了两个枚举,
public enum XParameter { XTypeFoo, XTypeBar } and
public enum YParameter { YTypeFoo, YTypeBar }
现在我需要将Parameter
属性的类型从string
更改为其他内容(取决于Type
)
即如果用户选择Type
为XType
,则Parameter
应为XParameter
,如果YType
则为XParameter
。
那么什么是基类型。
答案 0 :(得分:0)
不可能,我认为不需要。你应该重新设计你的课程。
为参数设置只有{ Foo, Bar }
的枚举怎么样?
答案 1 :(得分:0)
你不能从enums
开始,所以你需要使用课程。对每个枚举值使用类常量或“Dummyclass”:
在这两种情况下,您都使用基类:
public class BaseParameter { }
“Dummyclass”:
public class XParameter : BaseParameter { }
public class YParameter : BaseParameter { }
public class XTypeFoo : XParameter { }
public class XTypebar : XParameter { }
public class YTypeFoo : YParameter { }
public class YTypebar : YParameter { }
常量:
public class XParameter : BaseParameter
{
public readonly BaseParameter TypeFoo = new XParameter();
public readonly BaseParameter TypeBar = new XParameter();
}
public class YParameter : BaseParameter
{
public readonly BaseParameter TypeFoo = new YParameter();
public readonly BaseParameter TypeBar = new YParameter();
}
在以下情况下,您可以使用IsAssignable
来检查XParameter
或YParamter
以及您使用的value is XTypeFoo
或value == XParameter.TypeFoo
。
答案 2 :(得分:0)
如果Type
将是一个枚举而Parameter
也将是一个枚举(虽然允许的值将取决于Type
),那么基本上所有可能的值都是事先已知的。那么为什么不对Parameter
和丢弃Type
属性进行单一的组合枚举?例如,
public enum ParameterType
{
XTypeFoo,
XTypeBar,
YTypeFoo,
YTypeBar,
}
或者,您可以开始询问有关类型信息的Parameter
。例如,
public interface IParameter
{
public ParamType GetParamType();
}
public sealed class FooParameter : IParameter
{
public static readonly FooParameter XParameter = new FooParameter();
public static readonly FooParameter YParameter = new FooParameter();
public ParamType GetParamType() { return ParamType.Foo; }
private FooParameter() { }
}
public sealed class BarParameter : IParameter
{
public static readonly BarParameter XParameter = new BarParameter();
public static readonly BarParameter YParameter = new BarParameter();
public ParamType GetParamType() { return ParamType.Bar; }
private BarParameter() { }
}
public class MyControl : UserControl
{
IParameter Parameter {get; set; }
...
}