using System;
/*一个非常精致的类。
* 这是我所见过的最好的一段程序示例。
* 非常短小,但是却几乎包含了一个类所能拥有的一切。
* 包括:委托、事件机制、接口、接口继承,当然还有最不起眼的属性和方法。
* 设计这个类的作者可谓独具匠心,令人叹服。这也就是作者不俗之处。*/
namespace ObjectType
{
public delegate void ADelegate();
public interface IChanged
{
event ADelegate AnEvent;
}
public interface IPoint
{
int X {get; set;}
int Y {get; set;}
}
class Point:IPoint, IChanged
{
#region IPoint 成员
private int x;
public int X
{
get
{
// TODO: 添加 Point.X getter 实现
return this.x;
}
set
{
// TODO: 添加 Point.X setter 实现
this.x = value;
AnEvent();
}
}
private int y;
public int Y
{
get
{
// TODO: 添加 Point.Y getter 实现
return this.y;
}
set
{
// TODO: 添加 Point.Y setter 实现
this.y = value;
AnEvent();
}
}
#endregion
#region IChange 成员
public event ObjectType.ADelegate AnEvent;
#endregion
}
class EntryPoint
{
static void CallMe()
{
Console.WriteLine("I got called!");
}
[STAThread]
static void Main(string[] args)
{
Point p = new Point();
IChanged ic = p;
IPoint ip = p;
ic.AnEvent += new ADelegate(CallMe);
ip.X = 42;
ip.Y = 42;
Console.WriteLine("X: {0} Y: {0}", p.X, p.Y);
}
}
}
/*一个非常精致的类。
* 这是我所见过的最好的一段程序示例。
* 非常短小,但是却几乎包含了一个类所能拥有的一切。
* 包括:委托、事件机制、接口、接口继承,当然还有最不起眼的属性和方法。
* 设计这个类的作者可谓独具匠心,令人叹服。这也就是作者不俗之处。*/
namespace ObjectType
{
public delegate void ADelegate();
public interface IChanged
{
event ADelegate AnEvent;
}
public interface IPoint
{
int X {get; set;}
int Y {get; set;}
}
class Point:IPoint, IChanged
{
#region IPoint 成员
private int x;
public int X
{
get
{
// TODO: 添加 Point.X getter 实现
return this.x;
}
set
{
// TODO: 添加 Point.X setter 实现
this.x = value;
AnEvent();
}
}
private int y;
public int Y
{
get
{
// TODO: 添加 Point.Y getter 实现
return this.y;
}
set
{
// TODO: 添加 Point.Y setter 实现
this.y = value;
AnEvent();
}
}
#endregion
#region IChange 成员
public event ObjectType.ADelegate AnEvent;
#endregion
}
class EntryPoint
{
static void CallMe()
{
Console.WriteLine("I got called!");
}
[STAThread]
static void Main(string[] args)
{
Point p = new Point();
IChanged ic = p;
IPoint ip = p;
ic.AnEvent += new ADelegate(CallMe);
ip.X = 42;
ip.Y = 42;
Console.WriteLine("X: {0} Y: {0}", p.X, p.Y);
}
}
}