C#属性可以接受多个值吗?

时间:2009-04-14 01:52:08

标签: c# .net properties anti-patterns

这可能是一种反模式,但C#类的属性可以接受多个值吗?

例如,假设我有一个Public int属性,并且我总是希望它返回一个int,但我希望能够通过分配十进制,整数或其他一些数据类型来设置属性。所以我的问题是属性是否可以接受多个值?

5 个答案:

答案 0 :(得分:10)

我认为您的意思是: implicitexplicit如何投放intdecimal

您正在询问隐式转换,它会自动将一个对象转换为另一个定义的类型。您将无法为intdecimal执行此操作,因为它们已在框架中定义,您无法通过将其转换为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方法,或在赋值语句中执行强制转换/转换,而不是在属性设置器中。