怎么将内对象的接口公布出去???interface Iinner
{
  void innerFuction();
}class innerClass:Iinner
{
.....
}interface IOuter
{
  void OuterFuction();
}class outerClass:IOuter
{
  innerClass in = null;
  public outerClass
  {
     in = new innerClass();
   }
  
   //?????    
}//使用
class myClass
{
   void function1()
   {
     outerClass out = new outerClass();
     IOuter iOut = out as IOuter;
     iOut.OuterFuction(); //OK     Iinner iInner = out as IOuter;//如何实现该功能???   
   }
}As操作符好象不能重载!!!原来在Com中好象重载QueryInterface就可以了,这样IOuter究竟是那个对象实现对使用者是透明的.

解决方案 »

  1.   

    out as IOuter 是错误的,除非你的
    class outerClass:IOuter, IinnerClass
      

  2.   

    eastasp(东东),
    哈哈,我知道是错误的,就是想问怎样才能让它变成正确???
    要是class outerClass:IOuter, IinnerClass,太麻烦了(特别是接口很多的时候),有没有其他办法??????????????
      

  3.   

    public static explicit operator Iinner(IOuter outer)
    {
      //
    }使用:
         Iinner iInner = (Iinner) out;
      

  4.   

    Ivony(),
    按你说的出现下列错误:
    User-defined conversion must convert to or from the enclosing type怎么回事情?
      

  5.   

    com 用queryinterface 因为他的底层不支持面向对象,
    .net下没必要这么复杂
    直接继承两个接口不就行了
      

  6.   

    to Ivony(),
    我也试出来了,对接口不行,对类可以!!(对 enclosing type没有明白是什么意思?)to hdt(倦怠),
    "直接继承两个接口不就行了",假如接口很多的话,很麻烦的.
    "或者使用普通的面向语言的方式不就行了,类似于桥接",不明白怎么做,能说详细点吗??
      

  7.   

    com 的聚合是为了二进制的复用,在没有.net框架的时候是一种不得以而为之的做法。因为内部类可能是别人开发的外部类无法直接使用之。
    .net平台的程序都是基于公共语言的,不存在使用它的理由。我说的桥接类似于这样
    public class inner
    {
      public void test()
     {}
    }
    public class outer
    {
      inner _in;
      void test()
      {
          _in.test();
       }
    }