这可能有点反模式,但是 C# 类上的属性是否可以接受多个值?
例如,假设我有一个 Public int 属性,我总是希望它返回一个 int,但我希望能够通过分配小数、整数或其他数据类型来设置属性。所以我的问题是属性是否可以接受多个值?
这可能有点反模式,但是 C# 类上的属性是否可以接受多个值?
例如,假设我有一个 Public int 属性,我总是希望它返回一个 int,但我希望能够通过分配小数、整数或其他数据类型来设置属性。所以我的问题是属性是否可以接受多个值?
我认为您要问的是:隐式和显式转换如何为and工作?int
decimal
您正在询问隐式转换,它会自动将一个对象转换为另一种定义的类型。您将无法为 an 执行此操作int
,decimal
因为它们已经在框架中定义,并且您无法decimal
通过将其转换为来缩小范围int
。但是,如果您将其用作您创建的实际对象的示例,则可以使用上面的隐式链接,以了解有关其工作原理以及如何实现它的更多信息。
但是您始终可以使用 convert 方法将它们转换为正确的类型;
public int MyProperty { get; set; }
...
obj.MyProperty = Convert.ToInt32(32.0M);
obj.MyProperty = Convert.ToInt32(40.222D);
obj.MyProperty = Convert.ToInt32("42");
编辑:由于操作专门绑定到属性,因此无法使用此方法。
我不相信您描述的稳健性是可能的。在这种情况下,使用重载方法(多态性)可能会更好。
这就是通常所说的setter(或 mutator),您可以重载该方法以接受多种不同类型的参数。如果您愿意,每个都将执行不同的操作。我设置它们的方式可能在语法上不正确,但我相信这是您正在寻找的一般想法。
public class MyClass {
private Int32 mySomeValue;
public void setSomeValue(Double value) { this.mySomeValue = Convert.ToInt32(value); }
public void setSomeValue(Int32 value) { this.mySomeValue = value; }
}
没有。一个属性只有一个值。您可以为它分配任何可以分配给相同类型变量的东西。
似乎您必须在运行时确定类型。你可以让属性接受一个对象,确定类型并采取你的行动。当然,您将不得不为您不期望的事情抛出异常。就像你说的,可能不是最好的,但可能。:)
属性应该看起来有点像公共字段。创建 setter 方法,或在赋值语句中进行转换/转换,而不是在 property-setter 中。