Ответов, которые вы уже получили, более чем достаточно. Однако я заметил, что вы упомянули, что кастинг невозможен. Если у вас есть какая-то причина для использования приведений, вы можете сделать возможным , перегружая оператора.
public static explicit operator SalesMan(User user)
{
// Your logic to create a new SalesMan using data from user.
}
Чтобы определить, какое решение является умнее , потребуется больше информации, чем было предоставлено в исходном сообщении. Тем не менее, я склонен проветривать стороны полноты и универсальности, и хотел бы рассмотреть и то и другое.
public class SalesMan
{
public SalesMan(User user)
{
// Your logic to create a new SalesMan using data from user.
}
public static explicit operator SalesMan(User user)
{
return new SalesMan(user);
}
}
И Ян прав. Общее практическое правило - использовать фабрику только тогда, когда у вас есть функциональное требование, которое не может быть выполнено с помощью конструктора, или когда ограничения на языке начинают мешать вам. Например, нужны два разных конструктора с одинаковой подписью.