不知道这么写符合面向对象不?大家发表!
class action
{
public virtual void Call()
{
}
}
class cat:action
{
public override void Call()
{
Console.WriteLine("猫叫!");
}
}
class mouse:action
{
public override void Call()
{
Console.WriteLine("老鼠跑!");
}
}
class person : action
{
public override void Call()
{
Console.WriteLine("人被吵醒!");
}
}
class Program
{
static void Main(string[] args)
{
action[] at = new action[3];
at[0] = new cat();
at[1] = new mouse();
at[2] = new person();
foreach (action a in at)
{
a.Call();
}
Console.ReadLine();
}
}
class action
{
public virtual void Call()
{
}
}
class cat:action
{
public override void Call()
{
Console.WriteLine("猫叫!");
}
}
class mouse:action
{
public override void Call()
{
Console.WriteLine("老鼠跑!");
}
}
class person : action
{
public override void Call()
{
Console.WriteLine("人被吵醒!");
}
}
class Program
{
static void Main(string[] args)
{
action[] at = new action[3];
at[0] = new cat();
at[1] = new mouse();
at[2] = new person();
foreach (action a in at)
{
a.Call();
}
Console.ReadLine();
}
}
at[0] = new cat();
at[1] = new mouse();
at[2] = new person();
foreach (action a in at)
{
a.Call();
}
描述的是什么?上帝推动地球运转么?假设别人让你写个POS程序实现“如果顾客买东西,我就划价收钱”,结果你理解为你写个Main程序用代码来写:“第一步,顾客买xx东西;第二步,我收yy钱”么?所需要建模的对象之间的消息触发机制,模拟猫叫怎么会使得老鼠跑(以及猫不叫老鼠就没有跑),模拟猫叫怎么会使得人被吵醒(以及猫不叫则人就没有没吵醒)。你的那种“a.Call();”代码让我看了有些悲哀。
public delegate void CatShoutEvent ();
class Cat{
public event CatShoutEvent OnShout; public void Shout(){
Console.WriteLine ("Cat Shout");
if (OnShout!= null)
OnShout();
}
}class Rat{
public void Run ()
{
Console.WriteLine ("Rat Run");
}
}
class Man
{
public void WakeUp ()
{
Console.WriteLine ("Man Wakeup");
}
}class test
{
static void Main ()
{
Cat cat = new Cat();
Rat rat = new Rat();
Man man = new Man ();
cat.OnShout += rat.Run;
cat.OnShout += man.WakeUp;
cat.Shout();
}
}
5L说滴好.猫耗子和人的动作不是由你这个"上帝"来推动的
或者说你这个"上帝"推动猫叫了剩下的耗子和人应该就自然
做出反应,而不是由你这个"上帝"让他们做出反应.
第二天老板发飙!我在上CSDN!被老板看见!我被开除!
我去打猫!猫叫!老鼠跑!...
{
public delegate void SubEventHandler(object sender,EventArgs e);
public class Subject
{
public event SubEventHandler subEvent;
public virtual void OnAction(EventArgs e)
{
if (subEvent != null)
{
subEvent(this, e);
}
}
} public abstract class Observer
{
private Subject sub;
public Observer(Subject sub)
{
this.sub = sub;
this.sub.subEvent += new SubEventHandler(ObResult);
} public abstract void ObResult(object sender, EventArgs e);
} class Cat:Subject
{
public void Scream()
{
Console.WriteLine("猫叫~~");
OnAction(EventArgs.Empty);
}
} class Mouse : Observer
{
public Mouse(Subject sub)
: base(sub)
{ } public override void ObResult(object sender, EventArgs e)
{
Console.WriteLine("老鼠吓跑了~");
}
} class Master : Observer
{
public Master(Subject sub)
: base(sub)
{ }
public override void ObResult(object sender, EventArgs e)
{
Console.WriteLine("主人醒了~");
}
}
class Program
{
static void Main(string[] args)
{
Cat cat = new Cat();
Mouse[] mouses = new Mouse[3];
for (int i = 0; i < mouses.Length; i++)
{
mouses[i] = new Mouse(cat);
}
Master master = new Master(cat);
cat.Scream();
Console.ReadKey();
}
}
}