2009年12月25日 星期五

C# 運用 AssemblyName 叫用 Method範例

最近在試一個東西,首先,要從 XML 讀取檔案,

裡面記錄了每個類別的 AssemblyFullName、是否需要執行此類別,以及它執行時所需要的參數。

接著我需要藉由程式判斷是否叫用此類別。類別的架構設計如下面範例所示:

AbstractShape
Triangle
Rectangle

AbstractShape 中有兩個函數,GetNameGetArea

我要在程式動態載入的時候呼叫 GetArea,語法如下:


using System;
using System.Reflection;

namespace InvokeMethodDemo
{
class Program
{
static void Main(string[] args)
{
object[] arg = new object[] { 10.0m, 20.0m };
Object obj = Activator.CreateInstance(Type.GetType("InvokeMethodDemo.Triangle"), arg);
MethodInfo m = obj.GetType().GetMethod("GetArea");
object result = m.Invoke(obj, null);
Console.WriteLine(string.Format("{0}'s area is {1}", ((Shape)obj).GetName(), Convert.ToDecimal(result)));
Console.WriteLine("Press Any Key to Exit.");
Console.ReadKey();
}
}

abstract class AbstractShape
{
protected string name;
public string GetName()
{
return name;
}
public abstract decimal GetArea();
}

class Triangle : AbstractShape
{
decimal width;
decimal hieght;
public Triangle(decimal width, decimal hieght)
{
this.width = width;
this.hieght = hieght;
this.name = "Triangle";
}

public override decimal GetArea(){
return width * hieght;
}
}
}

沒有留言:

張貼留言