Может ли свойство C# принимать несколько значений?

Это может быть немного анти-шаблон, но возможно ли, чтобы свойство класса C# принимало несколько значений?

например, скажем, у меня есть свойство Public int, и я всегда хочу, чтобы оно возвращало int, но я хотел бы иметь возможность установить свойство, назначив decimal, integer или какой-либо другой тип данных. Итак, мой вопрос: возможно ли, чтобы свойства принимали несколько значений?

5 ответов


Я думаю, что вы хотите спросить:как подразумевается и явно кастинг работа для int и decimal?

вы спрашиваете о неявном приведении, которое автоматически закрывает один объект для другого определенного типа. Вы не сможете сделать это для 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");

Edit: этот метод нельзя использовать, так как op специально привязан к свойствам.

Я не верю, что это возможно с той надежностью, которую вы описываете. В этом случае вам лучше будет использовать перегруженный метод (полиморфизм).

это то, что обычно называют сеттер (или мутатор), и вы можете перегрузить метод, чтобы принять несколько различных типов параметров. Каждый выступит по-другому, если хотите. То, как я их настроил, может быть не синтаксически правильным, но это общая идея, которую вы ищете, я верю.

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.