Есть ли лучший способ иметь C ++ - подобные const объекты в C #, чем кодировать все проверки самостоятельно?
Я знаю, я могу сделать это:
readonly Whatever a = new Whatever();
Но это простомешает вам переназначить a
, не мешает вам изменить a
:
a = new Whatever(); // nope
a.some_property = 5; // still possible, if property exists and has a setter
Я не хочу, чтобы все Whatever
s были постоянными (в значении с), я просто хочу некоторые из них.
Утомительный подход будет следующим:
public class Whatever
{
private bool _isConst;
private int _some_property = 0;
public Whatever(isConst = false)
{
_isConst = isConst;
}
public int some_property
{
get {return _some_property;}
set
{
if (_isConst)
Debug.Assert(" ... ");
_some_property = value;
}
}
}
Есть ли лучший способ сделать это?
Поскольку комментарии предполагают, что я не очень ясно выразился:
В C ++ и в C # :
* const -> только для чтения
# DEFINE -> const
const (*) -> ???