montaque

小碗喝酒,小口吃肉

博客园 首页 新随笔 联系 订阅 管理

想了一个很简单的例子。就是人跟人互相加为好友的例子。

默认情况下 A 加 B 为好友,如果B 比较热情,或者喜欢交朋友的哦话,也会自动的把 A 加位好友。如果B 不是太喜欢交朋友的话,这时候朋友就是单向的。

这些习惯其实跟 对象本省没有任何关系,在 C# 中通过 Attrubute (特性)可以记录额外的信息。

一下是一段代码

1。定义一些属性

namespace Test
{

[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)
        
{
        }
     
    }


调用:

        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());

应为 p 比较 '热情' 所以他们会互为好友
posted on 2004-11-22 16:45  montaque  阅读(804)  评论(2编辑  收藏  举报