-3

Assembly クラスとそのメソッドについてもっと理解しようとしていますが、このURLには次のような例があります。

ただし、 method: 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 を返しました。

アセンブリ エントリ ポイント: Void Main() */

4

1 に答える 1

0

Assembly.CreateInstance メソッド (ここで説明を見つけることができます) を見ると、次のコードでそれを確認できます。

 Object o = assem.CreateInstance("Example", false, 
        BindingFlags.ExactBinding, 
        null, new Object[] { 2 }, null, null);

「o」に値を割り当てていないだけです。

次に、前に言ったように、次のように返していません。

assem.GetType("Example")

名前空間を追加すると、実際に問題が解決します。

今後は、問題を切り分けて、何が問題なのかを見つけてください。simlpy はデバッグに役立ちます

于 2013-10-01T20:50:45.993 に答える