Может ли свойство C# принимать несколько значений?
-
09-09-2019 - |
Вопрос
Возможно, это немного противоречит шаблону, но может ли свойство класса C# принимать несколько значений?
Например, скажем, у меня есть свойство Public int, и я всегда хочу, чтобы оно возвращало целое число, но мне хотелось бы иметь возможность установить свойство, назначив десятичное, целое число или какой-либо другой тип данных.Итак, мой вопрос: возможно ли, чтобы свойства принимали несколько значений?
Решение
Я думаю, что вы хотите спросить: Как скрытый и явный кастинг для 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");
Другие советы
Редактировать: Этот метод нельзя использовать, поскольку операция специально привязана к свойствам.
Я не верю, что это возможно с той надежностью, которую вы описываете.В этом случае вам, вероятно, будет лучше использовать перегруженный метод (полиморфизм).
Это то, что обычно называют сеттер (или мутатор), и вы можете перегрузить метод, чтобы принимать несколько разных типов параметров.Если хотите, каждый будет работать по-своему.То, как я их настроил, возможно, не является синтаксически правильным, но я считаю, что это общая идея, которую вы ищете.
public class MyClass {
private Int32 mySomeValue;
public void setSomeValue(Double value) { this.mySomeValue = Convert.ToInt32(value); }
public void setSomeValue(Int32 value) { this.mySomeValue = value; }
}
Похоже, вам придется определять тип во время выполнения.Вы можете заставить свойство принять объект, определить его тип и выполнить действие.Конечно, вам придется создавать исключения для вещей, которых вы не ожидаете.Как вы говорите, возможно, не лучший, но возможный.:)
Нет.Свойство имеет одно значение.Ему можно присвоить все, что можно присвоить переменной того же типа.
Свойства должны выглядеть как публичные поля.Создайте методы установки или выполните приведение/преобразование в операторах присваивания, а не в установщике свойств.