Как вы возвращаете тип на основе строки - PullRequest
3 голосов
/ 12 июня 2011

Например, у меня есть класс с именем Clothing, который наследуется от абстрактного класса Product.

public class Clothing : Product
{
    public bool IsInSeason {get; set;}
    public string Material {get; set; }
    public Decimal IsFeatured { get; set; }
}

Edit: В функции, как я смогу передать строку «Одежда» и получить тип возвращаемого класса?

ReturnTypeOfClassBasedOffOfString(string class)
{
    // ... 
}

Ответы [ 5 ]

5 голосов
/ 12 июня 2011

Использовать Type.GetType (строка)

Обратите внимание, что иногда имя класса будет недостаточно. Когда-нибудь вам нужно будет предоставить AssemblyQualifiedName

"Если тип находится в текущей выполняющейся сборке или в Mscorlib.dll, достаточно указать имя типа, соответствующее его пространству имен."

1 голос
/ 12 июня 2011

Вы можете использовать для этого Type.GetType, но: чего вы хотите достичь? Могу поспорить, вам нужно что-то попроще. Зачем нам вообще нужен класс Clothing

Кстати: ReturnTypeOfClassBasedOffOfString(string class) не скомпилируется. Вам нужно либо ReturnTypeOfClassBasedOffOfString(string classname), либо ReturnTypeOfClassBasedOffOfString(string @class).

0 голосов
/ 12 июня 2011

если вы хотите получить тип, достаточно:

Type.GetType

. И если вы хотите создать экземпляр, используя его строковое имя, вы должны использовать

Activator.CreateInstance

GoodLuck

0 голосов
/ 12 июня 2011

Вы можете использовать

Type.GetType("MyApplication.Product", true)

для этой цели, но вы должны включить пространство имен (например, «MyApplication»).

0 голосов
/ 12 июня 2011
static Type ReturnTypeOfClassBasedOffOfString(string className)
{
  foreach (Assembly a in AppDomain.Current.GetAssemblies ())
  {
    foreach (Type t in a.GetTypes ())
    {
      if (t.Name == className) // Ignore namespace
        return t;
    }
  }

  return null;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...