Как получить имя строки для разрешения объекта (т. Е. В смысле, что это такое) - PullRequest
4 голосов
/ 18 января 2011

Например, я могу сделать что-то вроде:

switch (myString)
case "rectangle":
 o = new rect();
 break;
case "ellipse"
 etc...

но как мне не сделать выше, то есть просто одна строка кода, которая получает объект непосредственно из строки. Представьте, например, кнопку и все, что она говорит, когда пользователь нажимает на нее, она берет отображаемый текст и создает из нее объект.

Ответы [ 4 ]

6 голосов
/ 18 января 2011

Если имя точно совпадает со строкой, вы можете сделать что-то вроде этого:

using System;
using System.Reflection;

class Example
{
    static void Main()
    {
        var assemblyName = Assembly.GetExecutingAssembly().FullName;
        var o = Activator.CreateInstance(assemblyName, "Example").Unwrap();
    }
}

Более простой подход выглядел бы так:

using System;
using System.Reflection;

class Example
{
    static void Main()
    {
        var type = Assembly.GetExecutingAssembly().GetType("Example");
        var o = Activator.CreateInstance(type);
    }
}

Но имейте в виду, что это очень простой пример, который не включает пространства имен, сборки со строгими именами или любые другие сложные вещи, которые возникают в больших проектах.

2 голосов
/ 18 января 2011
1 голос
/ 18 января 2011

Он descf,

Вы пробовали Activator.CreateInstace ("имя сборки", "имя типа");

0 голосов
/ 18 января 2011

A Заводской шаблон будет отделять код от строки.Пожалуйста, посмотрите на эту справочную страницу как для UML, так и для примера C # шаблона Factory.

...