Модель фабрики в C#

Единственная проблема, которую я вижу в коде, это async = "async". Попробуйте использовать приведенный ниже код.

<script async src="https://www.googletagmanager.com/gtag/js?id=UA-13086351-3"></script>
<script>window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-13086351-3');
</script>
<час>
5
задан Chris Cudmore 23 January 2009 в 15:25
поделиться

3 ответа

Я в настоящее время использую это в одном из моих приложений к новому класс

public static IMobileAdapter CreateAdapter(Type AdapterType)
{
  return (IMobileAdapter)System.Activator.CreateInstance(AdapterType);
}

Это возвращает экземпляр класса, который реализует IMobileAdapter, но Вы могли использовать его одинаково легко со строкой:

public static IMyClassInterface CreateClass(string MyClassType)
{
  return (IMyClassInterface)System.Activator.CreateInstance(Type.GetType(MyClassType));
}

Назовите его с помощью кода, подобного следующему:

IMyClassInterface myInst = CreateClass("MyNamespace.MyClass, MyAssembly");

Конечно, класс, который это создает, должен реализовать интерфейс IMyClassInterface в этом случае, но с фабрикой классов, у Вас, вероятно, были бы все свои классы, реализовывая тот же интерфейс так или иначе.

Править:

В отношении Вашего комментария, в целях этого обсуждения, думают о термине "блок" как набор файлов в рамках Вашего vb/cs проекта. Я предполагаю, что Вы делаете это все в рамках единственного проекта [блок] и распространяетесь по нескольким проектам.

В Вашем случае, поскольку Ваши классы будут расширять Объект формы, Вы сделали бы что-то вроде этого.

Form myInst = CreateClass("MyExtendedForm");

Или

Form myInst = CreateClass(Type.GetType("MyExtendedForm"));

В зависимости от того, получаете ли Вы тип в рамках своего метода CreateClass или снаружи. Необходимо было бы бросить экземпляр к корректному типу для доступа к любым пользовательским элементам. Рассмотрите это:

class MyCustomForm : Form
{
    public int myCustomField{ get; set; }
}

У меня есть пользовательская форма, которая расширяет Форму, добавляющую myCustomField свойство. Я хочу инстанцировать этого Активатора использования. CreateInstance ():

public static Form CreateClass(string InstanceName)
{
    return (Form)System.Activator.CreateInstance(Type.GetType(InstanceName));
}

Я затем называю это использованием:

Form myInst = CreateClass("MyCustomForm");

Таким образом, теперь мне сохранили мою пользовательскую форму в myInst. Однако для доступа к пользовательскому свойству [myCustomField] необходимо было бы бросить экземпляр к правильной форме:

int someVal = ((Type.GetType("MyCustomForm"))myInst).myCustomField;
6
ответ дан 14 December 2019 в 01:19
поделиться

Если у Вас есть строка, которая является названием класса, то необходимо смочь получить Текстовый объект оттуда путем вызова Типа. GetType (строка). От того типа необходимо смочь использовать отражение для генерации объекта.

0
ответ дан 14 December 2019 в 01:19
поделиться
Activator.CreateInstance(Type.GetType(typeName))
3
ответ дан 14 December 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: