سؤال

ما هي أفضل طريقة لتحويل سلسلة إلى كائن نوع في .NET؟

القضايا التي يجب مراعاتها:

  • قد يكون النوع في تجميع مختلف.
  • ربما لم يتم تحميل تجميع النوع بعد.

هذه محاولتي، لكنها لا تعالج المشكلة الثانية

Public Function FindType(ByVal name As String) As Type
    Dim base As Type

    base = Reflection.Assembly.GetEntryAssembly.GetType(name, False, True)
    If base IsNot Nothing Then Return base

    base = Reflection.Assembly.GetExecutingAssembly.GetType(name, False, True)
    If base IsNot Nothing Then Return base

    For Each assembly As Reflection.Assembly In _
      AppDomain.CurrentDomain.GetAssemblies
        base = assembly.GetType(name, False, True)
        If base IsNot Nothing Then Return base
    Next
    Return Nothing
End Function
هل كانت مفيدة؟

المحلول

قد تحتاج إلى استدعاء طريقة GetReferencedAssemblies() للثانية.

namespace reflectme
{
    using System;
    public class hello
    {
        public hello()
        {
            Console.WriteLine("hello");
            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            Type t = System.Reflection.Assembly.GetExecutingAssembly().GetType("reflectme.hello");
            t.GetConstructor(System.Type.EmptyTypes).Invoke(null);
        }
    }
}

نصائح أخرى

يمكنك استخدام Type.GetType(سلسلة) من أجل القيام بذلك.يجب أن يكون اسم النوع مؤهلاً للتجميع ولكن الطريقة ستقوم بتحميل التجميع حسب الضرورة.لا يعد تأهيل التجميع ضروريًا إذا كان النوع موجودًا في mscorlid أو التجميع الذي ينفذ استدعاء GetType.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top