以下是抽象工厂类的代码,不解的是这段代码既然是类(AbstractFactory)定义,那么在定义中可以直接出现AbstractFactory作为返回值类型吗??
左想右想都绝的怪怪的,很迷茫啊!!!
public abstract class AbstractFactory
    {
        public static AbstractFactory GetInstance()
        {
            string factoryName = Constant.STR_FACTORYNAME.ToString();            AbstractFactory instance;            if(factoryName == "ChineseFactory")
                instance = new ChineseFactory();
            else if(factoryName == "AmericanFactory")
                instance = new AmericanFactory();
            else
                instance = null;            return instance;
        }        public abstract Tax CreateTax();        public abstract Bonus CreateBonus();
    }

解决方案 »

  1.   

    可以的,这是单例模式。
    根据Constant.STR_FACTORYNAME返回ChineseFactory或AmericanFactory。
    ChineseFactory和AmericanFactory直接或间接派生于AbstractFactory
      

  2.   

    当然可以,因为对象都是引用类型的,一个对象里有同类型的成员,不是说包含了一个自己的同类,
    而是说这个成员是对同类的引用。比如我们定义人(Person),其Father()方法返回Person的父亲,也是Person类。
    class Person
    {
    public static Person Father(){}
    }
      

  3.   

    其实我想说的是:一个方法的定义如:返回值类型 a(){}.
    其中的返回值类型可以是基本的类型如INT,DOUBLE等也可以是自定义的类如PERSON,STUDENT等。
    但勿论怎么样的类型,都对应一个具体确定的类,基本类型已经有系统搞定,自定义的则在代码的某个地方出现。现在的问题是,我定义一个类型,在定义的过程中某个方法返回的类型是该定义的类型而该类型又处于正定义的过程中(我的理解为该类还不完整),这样定义编译器认为是没有问题的,但我就感觉有一点怪怪的,一个不完整的类可以拿来使用吗??
      

  4.   

    不完整是什么概念?    public class Test
        {    }不一定非要里面有写东西才叫类的,你已声明了,它就认了。
      

  5.   


    public class Test 
        {     } 
    是一个完整的类,不管里面是否有实现。如果有一方法 Test A(){},这是正常的,但抽象工厂类的代码直接就在声明使用该类这就使我绝的怪怪的!public class Test 
        { 
           public Test A()??
        } 
      

  6.   

    有何不可呀?
    public class Test
    {
        public Test(string Name)
        {
           this.Name=Name;
        }
        
        public string Name{get;set;}    public Test Clone()
        {
           return new Test(this.Name);
        }
    }