我试着做一个后期绑定的例子。这样我就能更好地理解早期绑定和后期绑定之间的区别。我这样试试:
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);
我无法弄清楚如何解决这个问题。
谢谢。
答案 0 :(得分:3)
因此,Assembly.GetType
显然已返回null
。让我们检查https://github.com/dmitryd/typo3-realurl/wiki/Configuration-reference#fixedpostvars并找出其含义:
返回值
键入:System.Type
一个表示指定类的Type对象,如果找不到该类,则为null。
因此,无法找到班级EarlyBindingVersusLateBinding.cust
。这并不奇怪,因为这不是程序集中的有效类型。 cust
是Main
方法中的局部变量。你可能想写:
Type CustomerType = hallo.GetType("EarlyBindingVersusLateBinding.Customer");