Namespace Porties
{
public class WebSet
{
public int Visiters = 0;
}
abstract public class WebServer
{
  protected string name;
  public virtual string Name
  {
get
{
  return name;
}
set
{
  name = value;
}
  }
}
public class Customer : WebServer
{
  WebSet status = new WebSet();
  public override string Name
  {
    get
    {
return name;
    }
    set
    {
base.name = value;
    }
  }
}
class program
{
  static void Main(string[] args)
    {
//以下不明白---
WebServer myWeb = new Customer(); //----这个不明白
//为什么不是Customer myWeb = new Customer();?
//这种实例化的例子,哪里有教程
    }
}
}

解决方案 »

  1.   

    ..这个是最简单的子类继承的问题....牵扯到类的多态.以及类的隐藏..
    因为 static   void   Main(string[]   args)不想知道Customer太多的东西,它只要知道WebServer就可以完成作业了...这样的好处就是带来代码的松耦合.
         
      

  2.   

    WebServer   myWeb   =   new   Customer();   //----这个不明白
    --------------------------------
    new Customer()是構造一個Customer對象,然後類型轉換為WebServer.
    由於Customer繼承自WebServer,所以這個轉換沒有任何問題.
      

  3.   

    Customer是从WebServer继承下来的类
    myWeb可以赋值为所有从WebServer继承下来的类实例
    就像“人”可以派生“男人”和“女人”
    当你们公司要招聘一个“人”时
    那么来个“男人”或来个“女人”都是复合要求的
      

  4.   

    解题:这是一种通过单向分派技术使OOD思想得到进一步的体现。这样的设计,即满足了类之间的层次关系,
    又保证了类的最小化原则,同时又体现了面向对象设计原则(开—闭原则、里氏代换原则)更利于扩展.
    在调用类对象的属性和方法时,尽量避免将具体类对象作为传递参数,而应传递其抽象对象,更好地是传递接口,将实际的调用和具体对象完全剥离开,这样可以很好地体现了软件工程的灵活性、扩展性如例:
    public abstract class AudioMedia 

       public abstract void Play(); 

     
    public class MP3:AudioMedia 

       public override void Play() 
       { 
           MessageBox.Show("Play the mp3 file."); 
       } 

     
    public class WAV:AudioMedia 

       public override void Play() 
       { 
           MessageBox.Show("Play the wav file."); 
       } 

     
    public class MediaPlayer 
    {   
           //根据需要完成任务的单向分派
       public void Play(AudioMedia media) 
       {       
           media.Play(); 
       }