错误信息是:未处理的“System.InvalidCastException”类型的异常出现在 DeletgateLesson.exe 中其他信息:指定的转换无效。

解决方案 »

  1.   

    C# 语言规范   13. 接口一个接口定义一个协定。实现某接口的类或结构必须遵守该接口定义的协定。一个接口可以从多个基接口继承,而一个类或结构可以实现多个接口。接口可以包含方法、属性、事件和索引器。<--接口本身不提供它所定义的成员的实现。-->接口只指定实现该接口的类或结构必须提供的成员。
      

  2.   

    kestrel(隼)兄:
        我是想做为插件的方式,装载器和插件通过该ICard接口来通信哦。
      

  3.   

    kestrel(隼)兄:
        我是想做为插件的方式,装载器和插件通过该ICard接口来通信哦。我基本上已经看过了MSDN上的学习资料,所以现在开始动手了.
      

  4.   

    CardLib.cs using System;namespace CardLib
    {
    public interface ICard
    {
    void ShowCardInfo();
    } /// <summary>
    /// Card 的摘要说明。
    /// </summary>
    public class RedCard : ICard
    {
    public RedCard()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }
    public void ShowCardInfo()
    {
    System.Console.WriteLine( "I am a Red Card" );
    }
    } /// <summary>
    /// Card 的摘要说明。
    /// </summary>
    public class GreenCard:ICard
    {
    public GreenCard()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }
    public void ShowCardInfo()
    {
    System.Console.WriteLine( "I am a Green Card" );
    }
    } /// <summary>
    /// Card 的摘要说明。
    /// </summary>
    public class BlueCard:ICard
    {
    public BlueCard()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }
    public void ShowCardInfo()
    {
    System.Console.WriteLine( "I am a Blue Card" );
    }
    }
    }
      

  5.   

    ///CardLib.cs
    using System;public interface ICard{
      void ShowCard();
    }public class GreenCard:ICard{
       public void ShowCard(){
         Console.WriteLine("Green card");
      }
    }public class RedCard:ICard{
      public void ShowCard(){
         Console.WriteLine("Red card");
      }
    }public class BlueCard:ICard{
       public void ShowCard(){
         Console.WriteLine("Blue card");
      }
      
    public class BadCard{}
    }
    //App.cs
    using System;
    using System.Reflection;
    using System.Collections;class App{
      static void Main(){
        do_LoadAndCall();
      }
      static void do_LoadAndCall(){
        ArrayList list = new ArrayList();
        Assembly assembly = Assembly.LoadFrom("CardLib.dll");
        MethodInfo method = null;
        Type[] types = assembly.GetTypes();
        foreach(Type t in types){
          Type type = t.GetInterface("ICard");
          if(type != null){
           if(method == null)
              method = type.GetMethod("ShowCard");
            object o = Activator.CreateInstance(t);
            list.Add(o);
          }
        }
        
       if(method != null)
         foreach(object o in list){
              Console.WriteLine(o);
              method.Invoke(o,null);
            }
              
      }
    }
      

  6.   

    避免不要有两个ICard就可以了。例如你可能会在App里定义一次ICard,在CardLib里再定义一次,那么这两个ICard是两个接口.当然不能转换.
      

  7.   

    RedCard, GreenCard, BlueCard 和 App继承的不是同一个接口
    using 你的命名空间;
           ...
      

  8.   

    Lostinet(『 迷失网络 』) 说得有道理,会不会是这个原因