Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C# Использование документации .Net https://www.cyberforum.ru/ csharp-net/ thread771176.html
Здравствуйте, у меня такой вопрос: под какой лицензией существует документация .Net на английском языке и позволяет ли это лицензия использовать текст это документации в своих программах с открытом...
Ошибка при передаче данных UDPClient C#
Здравствуйте. Делаю лабу по сетевому взаимодействию. Есть два приложения А и Б, используя UDPClient приложение А должно отправлять данные приложению Б в асинхронном режиме. Все работает если...
C# Почему NamedPipeServerStream пожирает память
Всем привет. Между процессами гоняю данные, но в случае аварийного отключения клиента, NamedPipeServerStream находясь на стадии записи, выдаёт исключение, я его обрабатываю, но приложение сервер,...
C# Доступ к стриму из разных потоков Задача такая, имеем мемористрим, в одном потоке постоянно пишем его. В другом потоке необходимо по запросу считывать весь поток в байтаррай, но чтобы позиция при записи не сместилась. Как решение... https://www.cyberforum.ru/ csharp-net/ thread770449.html
C# многопользовательские клиенты с общей базой https://www.cyberforum.ru/ csharp-net/ thread770377.html
Нужно написать 2 приложения под win8 и wp8 для создания личных записей. Должна бить синхронизация между приложениями. Данные будут синхронизироваться ч-з бд на mssql сервере в внешней ip. ВОПРОСЫ:...
C# Тема для дипломной работы
Здравствуйте. Дают выбрать тему для дипломной работы... Хочу выбрать что-то на .NET C#. Что-то интересное, может разработка какого-то интерфейса METRO или еще что... Ну в общем какую тему кто...
Сбор сетевой статистики C#
Привет, задача написать мониторчик сети.. щас показывает сколько в общем отправлено, получено байт у интерфейса NetworkInterface nw = NetworkInterface.GetAllNetworkInterfaces(); ...
C# Прочитать почту Доброго.Такой вопрос: можно ли получить почту с почтового сервера (тот же mail.ru) и прочитать последнее пришедшее письмо?Желательно с примерами. https://www.cyberforum.ru/ csharp-net/ thread770081.html
C# Перспективное направление в C# https://www.cyberforum.ru/ csharp-net/ thread769849.html
Как думаете, какое направление в C# перспективно?
C# Как запустить метод в главном потоке из не главного потока? Прив. У меня такая трабла, пишу клиент, для игры на одном движке, и если от сервера пришла какая-то определенная инфа, то мне необходимо создать нового персонажа на сцене. А метод, который создает... https://www.cyberforum.ru/ csharp-net/ thread769841.html
Master of Orion
Эксперт .NET
6079 / 4935 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
0

Обнуляемые классы (не встроенный Nullable<T>) с параметрами по умолчанию

25.01.2013, 00:51. Просмотров 531. Ответов 3
Метки (Все метки)


Здравствуйте. Прочитал "чистый код" и возник в конце вопрос: насколько это актуально? Я что-то редко видел такие объекты. По сабжу: если тип MyClass может вернуть Null, то мы пишем класс NullMyClass и даем ему поведение по-умлочанию. То есть например было такой код:
C#
1
2
3
4
5
6
7
8
9
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
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace NullableProj
{
    class Program
    {
        static void Main()
        {
            var col = new MyCollection();
            col.Add(new Person("Peter",18));
            var p = col.GetPersonByName("Anna");
            Console.WriteLine(p.Name);
            Console.ReadKey();
        }
    }
 
    class Person
    {
        public string Name { get; private set; }
        public int Age { get; private set; }
 
        public Person(string name, int age)
        {
            Name = name;
            Age = age;
        }
    }
 
    class MyCollection
    {
        private readonly List<Person> list = new List<Person>(); 
 
        public void Add(Person person)
        {
            list.Add(person);
        }
 
        public Person GetPersonByName(string name)
        {
            return list.FirstOrDefault(x => x.Name == name);
        }
    }
}
Очевидно, что тут вылетит эксепшн и надо писать
C#
1
2
3
4
5
6
7
8
9
10
11
        static void Main()
        {
            var col = new MyCollection();
            col.Add(new Person("Peter",18));
            var p = col.GetPersonByName("Anna");
            if (p != null) 
                Console.WriteLine(p.Name);
            else
                Console.WriteLine("Такого человека не существует!");
            Console.ReadKey();
        }
В книге предложен вариант: писать вот так:
C#
1
2
3
4
5
6
7
8
9
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
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace NullableProj
{
    class Program
    {
        static void Main()
        {
            var col = new MyCollection();
            col.Add(new Person("Peter",18));
            var p = col.GetPersonByName("Anna");
            Console.WriteLine(p.Name);
            Console.ReadKey();
        }
    }
 
    class Person
    {
        public string Name { get; private set; }
        public int Age { get; private set; }
 
        public Person(string name, int age)
        {
            Name = name;
            Age = age;
        }
    }
 
    class NullPerson : Person
    {
        public NullPerson() : base("Такого человека не существует", 0)
        {
        }
    }
 
    class MyCollection
    {
        private readonly List<Person> list = new List<Person>(); 
 
        public void Add(Person person)
        {
            list.Add(person);
        }
 
        public Person GetPersonByName(string name)
        {
            return list.FirstOrDefault(x => x.Name == name) ?? new NullPerson();
        }
    }
}
И тогда никаких проверок в вызывающем коде не оказывается, потому что мы никогда не вернем Null, можем вернуть только объект с параметрами по-умолчанию. Вопрос: если такое применяется, почему я нигде такого не видел, а если не применяется, то почему?

Вернуться к обсуждению:
Обнуляемые классы (не встроенный Nullable<T>) с параметрами по умолчанию
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.01.2013, 00:51
Готовые ответы и решения:

Классы и конструктор по умолчанию/с параметрами
Помогите пожалуйста! Необходимо сконструировать класс с заданным набором свойств. В данном случае,...

Как сделать открытие html-страничек в браузере, который стоит на ПК по умолчанию, а не через встроенный?
Как сделать в делфи открытие html страничек в браузере который стоит на пк по умолчанию,а не через...

Функция с параметрами по умолчанию
Помогите сделать прогу, Задание 1 (Функция с умалчиваемыми параметрам) Печать фамилии, курса и...

Конструктор с параметрами по умолчанию
Возможно ли создать конструктор с параметрами по умолчанию?? а то компилято мне ошибку выдает ...

__________________
Помогаю в написании студенческих работ здесь.
3
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.