Фреймворк имеет классы форматирования для поддержки.

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

Для того, чтобы получитьМетод Display () как для клиента, так и для сотрудника, я фактически начал заменятьИнтерфейс IPerson сЛицо абстрактного класса.

Но потом я остановился, вспомнив подкаст, в котором дядя Боб рассказывал Скотту Хансельману оПринцип единой ответственности в котором у вас должно быть много маленьких классов, каждый из которых выполняет одну конкретную вещь, то есть класс Customer не должен иметьРаспечатать() а такжеСохранить() а такжеCalculateSalary () метод, но вы должны иметьКласс CustomerPrinter иКласс CustomerSaver иКласс CustomerSalaryCalculator.

Это кажется странным способом программирования. Тем не мение,избавиться от моего интерфейса также чувствовал себя неправильно (так как многие контейнеры IoC и примеры DI используют их по своей природе), поэтому я решил попробовать Принцип Единой Ответственности.

Такследующий код отличается от того, что я запрограммировал в прошлом (Я бы сделал абстрактный класс с методом Display () и избавился бы от интерфейса), но основываясь на том, что я слышал о разъединении и S.O.L.I.D. принципы,этот новый способ кодирования (интерфейс и класс PersonDisplayer)Я думаю, что это правильный путь.

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

using System;

namespace TestGeneric33
{
    class Program
    {
        static void Main(string[] args)
        {
            Container container = new Container();
            Customer customer1 = container.InstantiateType<Customer>("Jim", "Smith");
            Employee employee1 = container.InstantiateType<Employee>("Joe", "Thompson");
            Console.WriteLine(PersonDisplayer.SimpleDisplay(customer1));
            Console.WriteLine(PersonDisplayer.SimpleDisplay(employee1));
            Console.ReadLine();
        }
    }

    public class Container
    {
        public T InstantiateType<T>(string firstName, string lastName) where T : IPerson, new()
        {
            T obj = new T();
            obj.FirstName = firstName;
            obj.LastName = lastName;
            return obj;
        }
    }

    public interface IPerson
    {
        string FirstName { get; set; }
        string LastName { get; set; }
    }

    public class PersonDisplayer
    {
        private IPerson _person;

        public PersonDisplayer(IPerson person)
        {
            _person = person;
        }

        public string SimpleDisplay()
        {
            return String.Format("{1}, {0}", _person.FirstName, _person.LastName);
        }

        public static string SimpleDisplay(IPerson person)
        {
            PersonDisplayer personDisplayer = new PersonDisplayer(person);
            return personDisplayer.SimpleDisplay();
        }
    }

    public class Customer : IPerson
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Company { get; set; }
    }

    public class Employee : IPerson
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int EmployeeNumber { get; set; }
    }
}

Ответы на вопрос(5)

Ваш ответ на вопрос