这可能是一种反模式,但C#类的属性可以接受多个值吗?
例如,假设我有一个Public int属性,并且我总是希望它返回一个int,但我希望能够通过分配十进制,整数或其他一些数据类型来设置属性。所以我的问题是属性是否可以接受多个值?
答案 0 :(得分:10)
我认为您的意思是: implicit和explicit如何投放int
和decimal
?
您正在询问隐式转换,它会自动将一个对象转换为另一个定义的类型。您将无法为int
和decimal
执行此操作,因为它们已在框架中定义,您无法通过将其转换为decimal
来缩小范围int
。但是,如果您使用它作为您创建的实际对象的示例,则可以使用上面的implicit链接,以了解有关其工作原理以及如何实现它的更多信息。
但是你总是可以使用convert方法将它们转换为正确的类型;
public int MyProperty { get; set; }
...
obj.MyProperty = Convert.ToInt32(32.0M);
obj.MyProperty = Convert.ToInt32(40.222D);
obj.MyProperty = Convert.ToInt32("42");
答案 1 :(得分:2)
编辑:由于op专门绑定到属性,因此无法使用此方法。
我不相信你所描述的健壮性是可能的。在这种情况下,您可能最好使用重载方法(多态)。
这就是通常所说的 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; }
}
答案 2 :(得分:1)
您似乎必须在运行时确定类型。您可以让属性接受对象,确定类型并采取您的操作。当然,你必须为你不期望的事情抛出异常。就像你说的,可能不是最好的,但可能。 :)
答案 3 :(得分:0)
没有。属性具有单个值。您可以为其分配任何可以分配给相同类型变量的内容。
答案 4 :(得分:-1)
属性看起来有点像公共字段。创建setter方法,或在赋值语句中执行强制转换/转换,而不是在属性设置器中。