【发布时间】:2013-10-01 20:35:57
【问题描述】:
我正在尝试更多地了解 Assembly 类及其方法,在此 URL 上有一个示例如下:
但是,方法:assem.GetType("Example").GetMethod("SampleMethod") 抛出异常错误并抱怨没有对象引用。
似乎该方法之前的方法也返回null。有什么想法吗?
using System;
using System.Reflection;
using System.Security.Permissions;
[assembly:AssemblyVersionAttribute("1.0.2000.0")]
public class Example
{
private int factor;
public Example(int f)
{
factor = f;
}
public int SampleMethod(int x)
{
Console.WriteLine("\nExample.SampleMethod({0}) executes.", x);
return x * factor;
}
public static void Main()
{
Assembly assem = Assembly.GetExecutingAssembly();
Console.WriteLine("Assembly Full Name:");
Console.WriteLine(assem.FullName);
// The AssemblyName type can be used to parse the full name.
AssemblyName assemName = assem.GetName();
Console.WriteLine("\nName: {0}", assemName.Name);
Console.WriteLine("Version: {0}.{1}",
assemName.Version.Major, assemName.Version.Minor);
Console.WriteLine("\nAssembly CodeBase:");
Console.WriteLine(assem.CodeBase);
// Create an object from the assembly, passing in the correct number
// and type of arguments for the constructor.
Object o = assem.CreateInstance("Example", false,
BindingFlags.ExactBinding,
null, new Object[] { 2 }, null, null);
// Make a late-bound call to an instance method of the object.
MethodInfo m = assem.GetType("Example").GetMethod("SampleMethod");
Object ret = m.Invoke(o, new Object[] { 42 });
Console.WriteLine("SampleMethod returned {0}.", ret);
Console.WriteLine("\nAssembly entry point:");
Console.WriteLine(assem.EntryPoint);
}
}
/* 此代码示例产生类似于以下的输出:
程序集全名: 来源,版本=1.0.2000.0,文化=中性,PublicKeyToken=null
名称:来源 版本:1.0
汇编代码库: file:///C:/sdtree/AssemblyClass/cs/source.exe
Example.SampleMethod(42) 执行。 SampleMethod 返回 84。
程序集入口点: 无效的主要() */
【问题讨论】:
-
我猜
GetType(..)返回null。请隔离实际问题 - 如果 GetType 确实返回 null,则 GetMethod 完全无关。 -
所以你给了我们一个可以工作的程序......那么一个不工作的程序呢? (该代码绝对适合我……目前尚不清楚您是否正在运行该确切代码并遇到问题,或者是什么……)
-
我可以重现这个 if 我把这段代码放在一个命名空间中。鉴于此,-1 表示不包括实际代码。
标签: c# .net-assembly