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();?
//这种实例化的例子,哪里有教程
}
}
}
{
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();?
//这种实例化的例子,哪里有教程
}
}
}
解决方案 »
- c# 修改注册表项:SYSTEM\CurrentControlSet\Enum\usb 项 问题
- 获取客户端网卡地址 但结果只显示“ss”
- 如何将输入的字符串转换为数值
- 关于类库的引用错误
- 我刚入公司,有些初级问题急等解决,得到正解立即结贴
- 线程问题+ActiveX问题+2005(我也搞不清楚是什么问题)
- C#操作access数据库,有个简单的sql查询实现不了,请教大家下
- [求助DataGrid导出Excel]请朋友们指点指点
- 怎么把能比较方便的把C# Winform 的treeview控件的数据保存到数据库里面,不通过Insert语句怎么实现?
- 百度街景地图的绘制方法
- 记录修改的数据
- 用正则表达试 去掉前面 第一第二个逗号与其间的数字,怎写
因为 static void Main(string[] args)不想知道Customer太多的东西,它只要知道WebServer就可以完成作业了...这样的好处就是带来代码的松耦合.
--------------------------------
new Customer()是構造一個Customer對象,然後類型轉換為WebServer.
由於Customer繼承自WebServer,所以這個轉換沒有任何問題.
myWeb可以赋值为所有从WebServer继承下来的类实例
就像“人”可以派生“男人”和“女人”
当你们公司要招聘一个“人”时
那么来个“男人”或来个“女人”都是复合要求的
又保证了类的最小化原则,同时又体现了面向对象设计原则(开—闭原则、里氏代换原则)更利于扩展.
在调用类对象的属性和方法时,尽量避免将具体类对象作为传递参数,而应传递其抽象对象,更好地是传递接口,将实际的调用和具体对象完全剥离开,这样可以很好地体现了软件工程的灵活性、扩展性如例:
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();
}
}