Как вывести список всех измененных файлов в теневом томе?

Когда точка восстановления создана, Windows начинает мониторинг тома, и любые изменения записываются в собственный файл diff внутри папки System Volume Information.

API для VSS-SDK мы можем выставить том, но он показывает нам весь том и все файлы / папки, которые были или не были изменены с момента создания снимка, и при доступе к любому файлу, скажем, он называется DVDPlayer - и я хочу, чтобы enum представлял, включен ли он, выключен или STANDBY.

Так что я могу поместить enum в класс - это не имеет смысла вне класса. У меня такой вопрос - должно ли перечисление быть публичным, чтобы другие классы могли запрашивать значения, или я должен сделать его закрытым, а затем иметь методы "isOn", "isOFf" и "isStandby"?

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

11
задан Sean Patrick Floyd 27 August 2010 в 08:34
поделиться

4 ответа

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

Если вы решите сделать его общедоступным, вам следует подумать о том, чтобы сделать его перечислением верхнего уровня. Я действительно не понимаю, почему вы говорите "это не имеет смысла вне класса". Я думаю, что DVDPlayerState звучит как прекрасное общедоступное/высокоуровневое перечисление.

8
ответ дан 3 December 2019 в 09:18
поделиться

Это зависит от того, как вы хотите использовать класс DVDPlayer из внешнего мира:

if (dvdPlayer.getState() == State.ON)

или

if (dvdPlayer.isOn())

Я думаю, что первый вариант лучше. Вам не нужно загрязнять свой код методами делегирования.

2
ответ дан 3 December 2019 в 09:18
поделиться

Как правило, вы хотите, чтобы все было максимально конфиденциально (хотя обычно это не тот вариант использования с перечислениями), но, судя по тому, как поставлен ваш вопрос, я не уверен, что вы используете перечисления как предназначена.

Вы хотите использовать перечисление для представления фиксированных значений; это более чистая альтернатива сохранению этих значений в виде статических конечных целых чисел или строк. Итак, для перечисления, объявленного как

public enum DvdState { ON, OFF, STANDBY };

Ваш класс будет выглядеть примерно так:

public class DvdPlayer {
    private DvdState state = DvdState.OFF;

    public void setState(DvdState state) {
        this.state = state;
    }
}

А вызывающий класс будет использовать следующий код:

dvdPlayer.setState(DvdState.ON);
2
ответ дан 3 December 2019 в 09:18
поделиться

Было бы целесообразно сделать перечисление общедоступным. Тогда у вас будет что-то вроде этого:

DvdPlayer.State getState();

Если у вас есть только три состояния, может быть предпочтительнее использовать методы isOn, isOff и isStandby. Для большего количества состояний публичное перечисление лучше. Также перечисление можно использовать в операторе switch, что удобно.

0
ответ дан 3 December 2019 в 09:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: