后期与装配绑定

时间:2017-05-20 12:56:21

标签: c# .net-assembly

我试着做一个后期绑定的例子。这样我就能更好地理解早期绑定和后期绑定之间的区别。我这样试试:

using System;
using System.Reflection;

namespace EarlyBindingVersusLateBinding
{
    class Program
    {
        static void Main(string[] args)
        {
            Customer cust = new Customer();


            Assembly hallo = Assembly.GetExecutingAssembly();

            Type CustomerType = hallo.GetType("EarlyBindingVersusLateBinding.cust");

            object customerInstance = Activator.CreateInstance(CustomerType);

            MethodInfo getFullMethodName = CustomerType.GetMethod("FullName");

            string[] paramaters = new string[2];
            paramaters[0] = "Niels";
            paramaters[1] = "Ingenieur";

            string fullname = (string)getFullMethodName.Invoke(customerInstance, paramaters);



            Console.WriteLine(fullname);
            Console.Read();

        }
    }

    public class Customer
    {

        public string FullName(string firstName, string lastName)
        {

            return firstName + " " + lastName;

        }

    }
}

但我得到了这个例外:

An unhandled exception of type 'System.ArgumentNullException' occurred in mscorlib.dll

Additional information: Value cannot be null.

在这一行:

 object customerInstance = Activator.CreateInstance(CustomerType);

我无法弄清楚如何解决这个问题。

谢谢。

1 个答案:

答案 0 :(得分:3)

因此,Assembly.GetType显然已返回null。让我们检查https://github.com/dmitryd/typo3-realurl/wiki/Configuration-reference#fixedpostvars并找出其含义:

  

返回值
  键入:System.Type
  一个表示指定类的Type对象,如果找不到该类,则为null。

因此,无法找到班级EarlyBindingVersusLateBinding.cust。这并不奇怪,因为这不是程序集中的有效类型。 custMain方法中的局部变量。你可能想写:

Type CustomerType = hallo.GetType("EarlyBindingVersusLateBinding.Customer");