То, когда объект, записанный в C#, создается, что происходит, - то, что инициализаторы работают в порядке от большей части производного класса до базового класса, и затем конструкторы, выполненные в порядке от базового класса до большей части производного класса (, видят блог Eric Lippert для деталей относительно того, почему это ).
Также в объектах.NET не изменяют тип, поскольку они создаются, но начинаются как большая часть производного типа с таблицей метода, являющейся для большей части производного типа. Это означает, что виртуальные вызовы метода всегда работают на большей части производного типа.
при объединении этих двух фактов Вас оставляют с проблемой, что при создании виртуального вызова метода в конструкторе, и это не большая часть производного типа в своей иерархии наследования, которой это назовут на классе, конструктор которого не был выполнен, и поэтому не может быть в подходящем состоянии для называния того метода.
Эта проблема, конечно, смягчена при маркировке класса, как изолировано, чтобы гарантировать, что это - большая часть производного типа в иерархии наследования - в этом случае совершенно безопасно назвать виртуальный метод.
Я добавляю имя шаблона в конце, если следую за ним (например, FooRepository).
Попытка избежать -Helper, -Manager, -Utils.
База, Читатель, Писатель, Менеджер, Файл ... некоторые другие.
Если мой класс специально выполняет вычисления, я добавлю Calc
Примеры:
Иногда я добавляю имя родительского класса, который я хочу унаследовать. Иногда это звучит странно, особенно с примером животных (DogAnimal, FishAnimal, ...), но это упрощает поиск подтипов в списке классов.
Я часто использую:
Иногда я использую
Target
Как в
Я не думаю, что раньше Silverlight / WPF, но теперь я также использую
Converter
Как в:
почему, конечно ...
База
работает в обе стороны.
; -)