Может ли свойство 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.