C#构造函数请教!
public class Light
{
    public virtual void TurnOn()
    {
    }
    public virtual void TurnOff()
    {
    }
    public static Light Create(string LightType)
    {
       if(LightType == "Bulb")
          return new BulbLight();
       else if(LightType == "Tube")
          return new TubeLight();
       else
          return null;
    }
}
public class BulbLight : Light
{
    public override void TurnOn()
    {
       Console.WriteLine("Bulb Light is Turned on");
    }
    public override void TurnOff()
    {
       Console.WriteLine("Bulb Light is Turned off");
    }
}
public class TubeLight : Light
{
    public override void TurnOn()
    {
       Console.WriteLine("Tube Light is Turned on");
    }
    public override void TurnOff()
    {
       Console.WriteLine("Tube Light is Turned off");
    }
}
谁能解释一下红色部分,就是用类的类型(Light)来建立函数,没有看懂。谢谢。
------解决方案-------------------- 感觉有点像工厂
但不应该放到父类里Create吧
难道是简化+偷懒版本工厂?
工厂的缺点:
事先要知道有多少个类
然后增加一个类又得回头修改switch分支
------解决方案-------------------- public static Light Create(string LightType){}
这不是构造函数,这个只是静态方法,创建Light类的函数
构造函数
public Light(){}
public Light(string str){}
探讨  谁能解释一下红色部分,就是用类的类型(Light)来建立函数,没有看懂。谢谢。 
------解决方案-------------------- 探讨  垃圾的设计 => 绝对垃圾的设计 
------解决方案-------------------- 探讨  初学者,学习了! 
------解决方案-------------------- ...这就是 Template Method模式嘛。。行为模式的一种。public virtual void TurnOn() 应换成protected
------解决方案-------------------- 这是典型的多态(Polymorphism)应用,你定义一个base class variable,但Light.Create 静态方法返回的是一个Subclass的Object,就是.Net Framework4 中的Covarient的应用。
C# code
static void Main()
{
    var light = Light.Create("Tube");
    light.TurnOn();
}
// Output: "Tube Light is Turned on"
------解决方案--------------------  探讨  引用: 补充一下Covariant的定义: Covariance means a derived class instance can be used where a parent class instance was expected. Covariance is the conversion of a type from more specific to mo…… 
------解决方案-------------------- 探讨  在哪抄的? 哪个家伙说的? 既然这么好,为什么不都用object, 还不都是从object派生出来的, 上面也说错了一点, 楼主的例子是多态, 却不是Covariance   二者虽然类似, 但是是不同的