c# - 在派生类中添加属性

标签 c# design-patterns

所以我正在尝试针对接口(interface)而不是实现进行编码。所以我有一个工厂返回一个派生自 Employee 的对象。所以这些对象可能类似于 Developer : Employee、Secretary : Employee 等。

所以我将所有共享属性(如 FirstName、LastName、Email 等)放在基类 (Employee) 中。

而且我应该将特定于每种类型的所有属性放在该类型中。所以 Developer 中会有一些属性,例如 Skills、ProgrammingLanguages 等。但是除非我使用 Developer 的具体类型,否则我将无法从 Employee 对象访问这些属性。

例如

Employee employee = new EmployeeFactory.CreateEmployee(EmployeeType.Developer);
employee.ProgrammingLanguages = "C#, Java, C++"; <-- compile error

解决此问题的最佳方法是什么?反射(reflection)...?

最佳答案

如果您要明确说明要使用哪种类型的员工,为什么还要为工厂费心呢?

相反,你可以这样写:

Developer dev = new Developer();
dev.ProgrammingLanguages = "C#, Java, C++"; // compiles fine

稍后,您仍然可以将“开发人员”添加到员工列表中,即:

IList<Employee> theEmployees = GetEmployees();
theEmployees.Add(dev); // This is fine, since Developer is an Employee...

关于c# - 在派生类中添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5422050/

相关文章:

c++ - CRTP 模式还在数据结构中存储非同质类型

design-patterns - 使用 ServiceStack 在 "per object per user"基础上控制权限的最佳设计模式?

c++ - 从 C++ 中的函数返回动态分配的缓冲区的最佳模式是什么?

c# - C# 中的线程和 lambda

c# - C# 中的 .NET 2.0 Framework 检查是否是 64 位操作系统,如果是的话,这样做吗?如果不这样做?更好的答案?

c# - 与 "always on top"相反

JavaScript 模块模式函数或 jQuery 委托(delegate)

c# - 如何将非命名空间类型导入 IronPython?

c# - finally block 的实际使用

c# - 重构开关盒