定义两接口Uo1:UO;
Uo2:UO;
注意,在UO中增加一方法,发现到底是谁(uc1 or uc2);
UO.GetObject();
然后就简单了。
public class uc1 :uo
{
   public String GetObject()
   {
       return "U1";
    }
   ........
}
public class Uo2:Uo
{
    public string GetObject()
    {
       return "u2";
    }
}
然后你调用Uo的GetObject()方法,根据返回的字符串,不就知道具体对象是Uo1 or Uo2了。

解决方案 »

  1.   

    为什么不是按照原来的类层次实现呢?基类 uc (基类方法uo)       /           \
    -------            ------------
      UC1重写UO1         UC2重写UO2
    -------            ------------具体借鉴泛型思想,binbin2000(binbin)得方法也不错,很实用
      

  2.   

    使用楼上的两种设计方法如何在外部提供一个统一的访问途径呢?UC1 uC1;
    UC2 uC2; 
    UContainer uCurrentContainer = uC1; (or uC2)
    uCurrentContainer.Op(); ( Op() inside  UO1+UO2 ) 这样虽然不好,但是外部能通过一个统一的uCurrentContainer来访问所有的UContainer子类。
      

  3.   

    如果只是想知道对象是哪个类型用instance is some Type就可以得到对象类型,我想你不是想实现设计模式中的工厂模式?a sample code about Factory :
    //类的设计
    public interface UO
    {
    String AddInstance(); String DeleteInstance();
    }public class UC1:UO
    {
    #region UO Members
    public String AddInstance()
    {
    return "New a instance,it's type is UC1";
    }
    public String DeleteInstance()
    {
    return "Delete a instance,it's type is UC1";
    }
    #endregion
    }
    public class UC2:UO
    {
    #region UO Members
    public String AddInstance()
    {
    return "New a instance,it's type is UC2";
    }
    public String DeleteInstance()
    {
    return "Delete a instance,it's type is UC2";
    }
    #endregion
    }
    public class UCFactory
    {
    public String AddNewInstance(UO instance)
    {
    String strReturn=null;
    if(instance is UC1)
    {

    UC1 a=(UC1)instance;
    strReturn=a.AddInstance();
    }
    if(instance is UC2)
    {
    UC2 b=(UC2)instance;
    strReturn=b.AddInstance();
    }
    return strReturn;

    }
    }
    //调用代码
    UCFactory factory=new UCFactory();
    UC1 uc1=new UC1();
    UC2 uc2=new UC2();
    MessageBox.Show(factory.AddNewInstance(uc1));
    MessageBox.Show(factory.AddNewInstance(uc2));
      

  4.   

    抽象工厂能提供一个统一的外部访问接口吗?比如:
        UC1 uC1 = new UC1();
        UC2 uC2 = new UC2();
        UContainer uCurrentContainer = uC1;
        uCurrentContainer.DoSomethingInInterfaceUO1();
        uCurrentContainer = uC2;
        uCurrentContainer.DoSomethingInInterfaceUO2();是不是Facade模式? 
      

  5.   

    Factory Method是一种创建性模式,它定义了一个创建对象的接口,但是却让子类来决定具体实例化哪一个类.当一个类无法预料要创建哪种类的对象或是一个类需要由子类来指定创建的对象时我们就需要用到Factory Method 模式了.简单说来,Factory Method可以根据不同的条件产生不同的实例,当然这些不同的实例通常是属于相同的类型,具有共同的父类.Factory Method把创建这些实例的具体过程封装起来了,简化了客户端的应用,也改善了程序的扩展性,使得将来可以做最小的改动就可以加入新的待创建的类. 通常我们将Factory Method作为一种标准的创建对象的方法,当发现需要更多的灵活性的时候,就开始考虑向其它创建型模式转化而Facade模式能降低系统偶合度,典型的是对数据访问模块的封装。通常情况下,设计模式总是混合应用的。要记住,我们学习设计模式是为了更灵活的应用而不是为了学习设计模式而学习设计模式楼主要实现的功能只要运用Factory模式+Facade模式(有点牵强)就可以实现了
      

  6.   

    public interface UContainer 
    {
    string One();
    } public interface UO1
    {
    string One();
    void Two();
    } public interface UO2
    {
                      string One();
    void Three();
    } public class UC1:UO1,UContainer 
    {
    public string One()
    {
        return "OneOfUC1";
    } public void Two()
    {

    }
    } public class UC2:UO2,UContainer 
    {
    public string One()
    {
    return "OneOfUC2";
    } public void Three()
    {

    }
    }
    }调用时:
    UC1 uc1=new UC1();
    UC2 uc2=new UC2();
    UContainer uc=uc1;
    MessageBox.Show(uc.One());
    UContainer uc=uc2;
    MessageBox.Show(uc.One());OK了。不过继承多接口不是太好,但就这个问题还是可以解决的。
      

  7.   

    谢谢楼上的两位。偶正在翻模式的书。
    hai4(敏敏),UContainer uc=uc2;无法调用UC2.Three()吧。