константные объекты (как в C ++) в C # - PullRequest
0 голосов
/ 23 ноября 2018

Есть ли лучший способ иметь 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 (*) -> ???

...