Вы можете изменить поля на свойства .После того, как вы изменили поля на свойства, вы можете проверить value
, для которого будет установлено соответствующее свойство, и, если оно не соответствует требованиям, вы можете сгенерировать исключение.
Пример:
class Room
{
private double _dblLength;
private double _dblWidth;
public double DblLength {
get
{
return _dblLength;
}
set
{
//TODO -> Do validation
//the keyword value represents the value that you want to pass to the property
if(value < 0)
{
throw new ArgumentOutOfRangeException("message");
}
_dblLength = value;
}
}
public double DblWidth
{
get
{
return _dblWidth;
}
set
{
//TODO -> Do validation
//the keyword value represents the value that you want to pass to the property
if (value < 1)
{
throw new ArgumentOutOfRangeException("message");
}
_dblWidth = value;
}
}
public Room(Double _dblLength, Double _dblWidth)
{
DblLength = _dblLength;
DblWidth = _dblWidth;
}
}
Еще одна полезная вещь: если вы хотите, чтобы свойства устанавливались только при создании экземпляра (только через конструктор), вы можете сделать установщик private
следующим образом:
class Room
{
private double _dblLength;
private double _dblWidth;
public double DblLength {
get
{
return _dblLength;
}
private set
{
//TODO -> Do validation
//the keyword value represents the value that you want to pass to the property
if(value < 0)
{
throw new ArgumentOutOfRangeException("message");
}
_dblLength = value;
}
}
public double DblWidth
{
get
{
return _dblWidth;
}
private set
{
//TODO -> Do validation
//the keyword value represents the value that you want to pass to the property
if (value < 1)
{
throw new ArgumentOutOfRangeException("message");
}
_dblWidth = value;
}
}
public Room(Double _dblLength, Double _dblWidth)
{
DblLength = _dblLength;
DblWidth = _dblWidth;
}
}
Это возможно, потому что свойства - это просто синтаксический сахар, предоставленный нам C #.Когда этот код скомпилирован, компилятор создаст два метода Get
и Set
для каждого свойства.Таким образом, если вы поместите модификатор доступа в геттер или сеттер, компилятор примет это во внимание, и когда он скомпилирует код, он поместит указанный вами модификатор.Однако, если не указан конкретный модификатор, компилятор примет модификатор самого свойства в приведенном выше случае, метод Get
будет открытым, а метод Set
- закрытым.После компиляции код будет выглядеть примерно так:
class Room
{
private double _dblLength;
private double _dblWidth;
public Room(Double _dblLength, Double _dblWidth)
{
SetDblLength(_dblLength);
SetDblWidth(_dblWidth);
}
public double GetDblLength()
{
return _dblLength;
}
private void SetDblLength(double value)
{
if (value < 0)
{
throw new ArgumentOutOfRangeException("message");
}
_dblLength = value;
}
public double GetDblWidth()
{
return _dblWidth;
}
private void SetDblWidth(double value)
{
if (value < 0)
{
throw new ArgumentOutOfRangeException("message");
}
_dblWidth = value;
}
}