c# - 将对象添加到列表的工厂方法
问题描述
我想寻求帮助,我需要用 Project 和 Employee 类的对象填写项目、员工表。我将非常感谢您的帮助。
class Menu
{
public void menu()
{
List<Project> projects = new List<Project>();
List<Employee> employees = new List<Employee>();
// Manipulate selection of a menu item
switch (menu)
{
case 1:
CreateFunc(new EmployeeType());
break;
case 2:
CreateFunc(new ProjectType());
break;
}
}
static void CreateFunc(CreateType create)
{
create.NewObject();
}
}
abstract class CreateType
{
public abstract ICreate Add();
public void NewObject()
{
var createtype = Add();
createtype.Adding();
}
}
class ProjectType : CreateType
{
public override ICreate Add()
{
return new Project();
}
}
class EmployeeType : CreateType
{
public override ICreate Add()
{
return new Employee();
}
}
解决方案
您的问题似乎有点不清楚,但是看着我的水晶球,您似乎需要方法Activator.CreateInstance
https://docs.microsoft.com/en-us/dotnet/api/system.activator.createinstance?view=netframework-4.8
静态类型创建
public class StaticFactory
{
public static T StaticInstance<T>() where T : class, new()
{
var entityType = typeof(T);
return (T) Activator.CreateInstance(entityType);
}
}
用法
var model1 = StaticFactory.StaticInstance<Boss>();
var model2 = StaticFactory.StaticInstance<Boss>();
var models = new List<dynamic> { model1, model2 };
动态类型创建
public class DynamicFactory
{
public static dynamic DynamicInstance(Type someType)
{
return Activator.CreateInstance(someType);
}
}
用法
var model1 = DynamicFactory.DynamicInstance(typeof(Boss));
var model2 = DynamicFactory.DynamicInstance(someEmployeeVariable.GetType());
var models = new List<dynamic> { model1, model2 };
界面创建
public interface SomeInterface
{
void DoWork();
}
public enum EnumType
{
Boss,
Employee
}
public class InterfaceFactory
{
public static SomeInterface InterfaceInstance(EnumType enumType)
{
switch (enumType)
{
case SomeType.Boss: return new Boss();
case SomeType.Employee: return new Employee();
}
return null;
}
}
用法
var model1 = InterfaceFactory.InterfaceInstance(EnumType.Boss);
var model2 = InterfaceFactory.InterfaceInstance(EnumType.Boss);
var models = new List<SomeInterface> { model1, model2 };
您还可以从父类型中提取基础类型,例如 int inList<int>
List<int> myList = ...
Type myListElementType = myList.GetType().GetGenericArguments().Distinct(); // all types in the list, in this case int
推荐阅读
- javascript - 用于通过 POST 接收 JSON 的 API 接收的类型与发送的类型不同
- c++ - 可以将字符串文字传递给采用 const char* 的函数吗?
- c - 我无法使用 getchar() 读取数字
- c# - 从不同的相对路径加载资源导致 500 错误 - 配置有什么问题?
- php - 验证时 Recaptcha 错误代码“连接失败”
- angular - 用户授予访问权限后,angular-ouath2-oidc 不重定向
- r - Plotly (r):下拉框中的值可以自动更改以反映数据框的更改吗?
- python - 无法修补 logging.Logger.info 在 celery 任务中调用
- typescript - 从数组中转移值的类型守卫
- npm - 为客户提供私人 npm