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

StackOverflow https://stackoverflow.com/questions/746048

Вопрос

Возможно, это немного противоречит шаблону, но может ли свойство класса 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; }
}

Похоже, вам придется определять тип во время выполнения.Вы можете заставить свойство принять объект, определить его тип и выполнить действие.Конечно, вам придется создавать исключения для вещей, которых вы не ожидаете.Как вы говорите, возможно, не лучший, но возможный.:)

Нет.Свойство имеет одно значение.Ему можно присвоить все, что можно присвоить переменной того же типа.

Свойства должны выглядеть как публичные поля.Создайте методы установки или выполните приведение/преобразование в операторах присваивания, а не в установщике свойств.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top