8

这可能有点反模式,但是 C# 类上的属性是否可以接受多个值?

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

4

5 回答 5

10

我认为您要问的是:隐式显式转换如何为and工作?intdecimal

您正在询问隐式转换,它会自动将一个对象转换为另一种定义的类型。您将无法为 an 执行此操作intdecimal因为它们已经在框架中定义,并且您无法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");
于 2009-04-14T01:55:30.850 回答
2

编辑:由于操作专门绑定到属性,因此无法使用此方法。

我不相信您描述的稳健性是可能的。在这种情况下,使用重载方法(多态性)可能会更好。

这就是通常所说的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; }
}
于 2009-04-14T01:58:59.080 回答
1

没有。一个属性只有一个值。您可以为它分配任何可以分配给相同类型变量的东西。

于 2009-04-14T01:54:15.517 回答
1

似乎您必须在运行时确定类型。你可以让属性接受一个对象,确定类型并采取你的行动。当然,您将不得不为您不期望的事情抛出异常。就像你说的,可能不是最好的,但可能。:)

于 2009-04-14T01:55:02.473 回答
-1

属性应该看起来有点像公共字段。创建 setter 方法,或在赋值语句中进行转换/转换,而不是在 property-setter 中。

于 2009-04-14T01:54:14.677 回答