c# - 类型转换和工厂模式

标签 c# factory-pattern

我很难弄清楚如何在我尝试创建的 DTO 映射器中实现工厂模式。我很确定我需要重新考虑我的设计。这是我遇到的一个非常小的例子:

    public abstract class Person
{
    public string Name { get; set; }
    public decimal Salary { get; set; }
}

public class Employee : Person
{
    public Employee()
    {
        this.Salary = 20000;
    }

}

public class Pilot : Person
{
    public string PilotNumber { get; set; }

    public Pilot()
    {
        this.Salary = 50000;
    }
}

public static class PersonFactory
{
    public static Person CreatePerson(string typeOfPerson)
    {
        switch (typeOfPerson)
        {
            case "Employee":
                return new Employee();
            case "Pilot":
                return new Pilot();
            default:
                return new Employee();
        }
    }
}

并使用工厂:

Person thePilot = PersonFactory.CreatePerson("Pilot");
        ((Pilot)thePilot).PilotNumber = "123ABC";

如何在不将其类型转换为 Pilot 的情况下加载 pilot 编号?这是错误的方法吗?我可以将飞行员号码放在 Person 类中,但 Employee 会继承该号码,这不是我想要的。我能做什么?

谢谢!

- jackson

最佳答案

当对象在实现而非接口(interface)上不同时,最好使用工厂模式。在您的情况下,工厂模式并不太有益,您最好直接创建对象(或者其他一些模式可能更好)。

关于c# - 类型转换和工厂模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3578648/

相关文章:

c# - 如何获取从头到某个字符后的子串?

c# - 关于处理表单的代码分析警告

php - 工厂方法的建议

c++ - 工厂模式中的传值

c# - Java中递归和非递归函数的效率比较

c# - 检测文件的每一行如何以 C# 结尾

java - 分两个层次应用工厂模式

c# - 工厂模式,避免不同接口(interface)使用相同的 switch case

c# - 如何声明事件处理程序以传递 FxCop 规则,尤其是包含 sender 和 e 的规则?

c# - Ninject.Extensions.Factory : cannot find binding