程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 面向對象中如何動態的調用其它的類

面向對象中如何動態的調用其它的類

編輯:.NET實例教程

問題:

         在一個主程序中調用一個類,假設為類名A,調用這個A的方法,但當用戶覺得調用這個A的方法不夠准確,於是設計了另一個類,類名為B,B也實現同一個方法名,但實現的具體過程不一樣,問題是:能否通過界面化的方式人工設置調用了B類而不是以前的A類了,不用去修改主程序的源代碼,A類可能也是存在的,因為它可以作為B類的父類,問題主要在於B類的類名B,是在將來命名的,可以說是隨機的,通過什麼樣的方式能實現這種調用 ?

 



using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;

namespace ConsoleApplication1
...{
    class Program
    ...{
        static void Main(string[] args)
        ...{
            //加載當前的程序集(WindowsApplication1.exe是當前的程序的exe)
            System.Reflection.Assembly ass = System.Reflection.Assembly.LoadFrom("ConsoleApplication1.exe");
            Type[] mytypes = ass.GetTypes();//獲取程序集的類型
            Console.WriteLine("選擇你需要調用的類:");
            int index = 0;
            foreach (Type t in mytypes)//列出程序集中的所有類
            ...{
                if (t.IsClass)//判斷該類型是不是類
                    Console.WriteLine(index + " " + t.Name);
                index++;
            }
            int selectIndex = int.Parse(Console.ReadLine());//按照要求,界面化的方式人工設置調用,選擇你需要的類
            Type type = mytypes[selectIndex];

            //創建程序集類型一個實例,as操作符來判斷該類是否支持指定的接口,如果不支持將給接口變量賦空值(null)
            IMyInterface myInterface = System.Activator.CreateInstance(type) as IMyInterface;
            if (myInterface != null)
                Console.Write("你所調用函數的返回值是:"+myInterface.getInformation());
            else
                Console.WriteLine("該類不支持指定接口!");
            Console.Read();
        }
    }
    //編寫一個接口,接口裡的方法可以由不同的類來繼承實現
    public interface IMyInterface
    ...{
        string getInformation();
    }
    public class A : IMyInterface
    ...{
        public string getInformation()//實現方式一
        ...{
            return "A.getInformation()";
        }
    }
    //類名可以是將來命名,也可以是隨機的,需要調用時可以通過反射(Reflection)來獲取
    public class B : IMyInterface
    ...{
        public string getInformation()//實現方式二
        ...{
            return "B.getInformation()";
        }
    }

}

 

http://topic.csdn.Net/u/20071006/15/cf4a9748-af81-4d84-b8b4-c2f38deb923a.Html


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved