Фабричный метод с добавлением объектов в Список - PullRequest
0 голосов
/ 21 марта 2020

Я хотел бы попросить помощи, мне нужно заполнить проекты, листы сотрудников объектами классов 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();
    }
}

Интерфейс и классы Project & Employee

1 Ответ

0 голосов
/ 22 марта 2020

Ваш вопрос кажется немного неясным, но, глядя на мой хрустальный шар, кажется, что вам нужен метод Activator.CreateInstance

https://docs.microsoft.com/en-us/dotnet/api/system.activator.createinstance?view=netframework-4.8

Stati c создание типа

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 };

Dynami c создание типа

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 в List<int>

List<int> myList = ...
Type myListElementType = myList.GetType().GetGenericArguments().Distinct(); // all types in the list, in this case int
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...