想了一个很简单的例子。就是人跟人互相加为好友的例子。
默认情况下 A 加 B 为好友,如果B 比较热情,或者喜欢交朋友的哦话,也会自动的把 A 加位好友。如果B 不是太喜欢交朋友的话,这时候朋友就是单向的。
这些习惯其实跟 对象本省没有任何关系,在 C# 中通过 Attrubute (特性)可以记录额外的信息。
一下是一段代码
1。定义一些属性
namespace Test
{
[AttributeUsage(AttributeTargets.Class)]
public class SymmetricAttribute:System.Attribute
{
public SymmetricAttribute()
{
}
}
}
{
[AttributeUsage(AttributeTargets.Class)]
public class SymmetricAttribute:System.Attribute
{
public SymmetricAttribute()
{
}
}
}
2。定义类型
public class Person
{
private string m_Name;
private Person m_person;
public Person(string name)
{
this.m_Name=name;
}
public virtual Person Friend
{
get
{
if(m_person!=null)
{
return m_person;
}
else
{
return new Person("NoFriend");
}
}
set
{
m_person=value;
//追加朋友
SymmetricAttribute att= System.Attribute.GetCustomAttribute(value.GetType(),typeof(SymmetricAttribute)) as SymmetricAttribute;
if(att!=null)
{
value.Friend=this;
}
}
}
public override string ToString()
{
return this.m_Name;
}
}
[Symmetric]
public class SpecialPerson:Person
{
public SpecialPerson(string name):base(name)
{
}
}
{
private string m_Name;
private Person m_person;
public Person(string name)
{
this.m_Name=name;
}
public virtual Person Friend
{
get
{
if(m_person!=null)
{
return m_person;
}
else
{
return new Person("NoFriend");
}
}
set
{
m_person=value;
//追加朋友
SymmetricAttribute att= System.Attribute.GetCustomAttribute(value.GetType(),typeof(SymmetricAttribute)) as SymmetricAttribute;
if(att!=null)
{
value.Friend=this;
}
}
}
public override string ToString()
{
return this.m_Name;
}
}
[Symmetric]
public class SpecialPerson:Person
{
public SpecialPerson(string name):base(name)
{
}
}
调用:
Person c=new Person("Person A");
SpecialPerson p=new SpecialPerson("Person B");
c.Friend=p;
Console.WriteLine(p.Friend.ToString());
Console.WriteLine(c.Friend.ToString());
SpecialPerson p=new SpecialPerson("Person B");
c.Friend=p;
Console.WriteLine(p.Friend.ToString());
Console.WriteLine(c.Friend.ToString());
应为 p 比较 '热情' 所以他们会互为好友