首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#构造函数请问

2012-09-23 
C#构造函数请教!public class Light{public virtual void TurnOn(){}public virtual void TurnOff(){}publ

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
二者虽然类似,
但是是不同的

热点排行