- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
public static class ProgramIO
{
private static bool enabled;
static ProgramIO()
{
ProgramIO.Enable();
}
public static bool IsEnabled()
{
return ProgramIO.enabled;
}
public static void Enable()
{
ProgramIO.enabled = true;
}
public static void Disable()
{
ProgramIO.enabled = false;
}
public static void WriteMessages(List<Message> messages)
{
foreach (var item in messages) ProgramIO.WriteLine(item.GetText());
}
public static void Write(string str)
{
if (ProgramIO.IsEnabled()) Console.Write(str);
}
public static void WriteLine(string str)
{
if (ProgramIO.IsEnabled()) Console.WriteLine(str);
}
public static void WriteLine()
{
ProgramIO.WriteLine("");
}
public static int Read()
{
if (ProgramIO.IsEnabled()) return Console.Read();
return 0;
}
public static string ReadLine()
{
if (ProgramIO.IsEnabled()) return Console.ReadLine();
return "";
}
}
Her 20.02.2017 18:38 # +2
nixel 22.02.2017 10:07 # 0
Или шарповый статик сильно отличается по смыслу от джавы, или я не понимаю, зачем выносить это на уровень класса. Особенно если это была попытка построить инкапсуляцию.
dm_fomenok 22.02.2017 15:43 # 0
Я одного понять не могу - класс-то зачем?
Автор утверждал, что стандартный класс Console не интуитивен и не понятен. И сотворил, по его словам, абстракцию
Судя по всему, абстракцию он нашёл в методе void WriteMessages(List<Message> messages) (List<> кстати тоже его, который внутри содержит стандартный)
inkanus-gray 22.02.2017 16:50 # 0
bormand 22.02.2017 17:33 # 0
inkanus-gray 22.02.2017 17:39 # 0
Тут всего лишь гипотетическая потеря пирфоманса из-за лишней передачи управления. Гораздо серьёзнее потеря в WriteMessages, где будет гоняться холостой цикл.
P.S. Кстати, можно разжечь срач на тему, где правильнее проверять флажок enabled: в самом начале цепочки выполнения (когда в худшем случае флаг будет проверен дважды) или непосредственно перед вызовом неабстрактного метода типа Console.Write().
inkanus-gray 22.02.2017 17:47 # 0
barop 22.02.2017 18:26 # 0
можно вообще компайлтайм