2011-06-17 130 views
0

我有这样的工作(实验室)做: ...有关事件的信息必须写在一些文件中,必须通过附加到这个类属性确定。 Wgat感觉是在这个属性?它必须做什么?关于反射的问题,在c中的属性#

所有实验室是“写通用类与机会列表生成的事件,当你调用一些类的方法。有关事件的信息必须写过一些文件,这些文件必须由连接到这个类属性来定量。

我不明白,使用本实验室属性的原因,请大家帮我

在这里,我已经写了样品泛型类名单的

这里有两个文件:

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Lab7 
{ 
    public class MyListClass<T>: IEnumerable<T> 
    { 
     public delegate void MyDelegate(); 
     public event MyDelegate AddEvent; 
     public event MyDelegate RemEvent; 

     List<T> list; 

     public T this[int index] 
     { 
      get { return list[index]; } 
      set { list[index] = value; } 
     } 

     public void Add(T item) 
     { 
      list.Add(item); 
      if (AddEvent != null) 
       AddEvent(); 
     } 

     public void Remove(T item) 
     { 
      list.Remove(item); 
      if (RemEvent != null) 
       RemEvent(); 
     } 

     public void RemoveAt(int index) 
     { 
      list.RemoveAt(index); 
      if (RemEvent != null) 
       RemEvent(); 
     } 

     public MyListClass() 
     { 
      list = new List<T>(); 
     } 

     public MyListClass(List<T> list) 
     { 
      this.list = list; 
     } 

     public IEnumerator<T> GetEnumerator() 
     { 
      return list.GetEnumerator(); 
     } 

     IEnumerator IEnumerable.GetEnumerator() 
     { 
      return list.GetEnumerator(); 
     } 

     #region Events 
     /*static void AddHandler() 
     { 
      Console.WriteLine("Объект добавлен в коллекцию"); 
     } 
     static void RemoveHandler() 
     { 
      Console.WriteLine("Объект удалён из коллекции"); 
     }*/ 
     #endregion 

    } 
} 

,这里是主类:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Lab7 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      MyListClass<int> lst = new MyListClass<int>(); 
      lst.AddEvent +=new MyListClass<int>.MyDelegate(AddHandler); 
      lst.RemEvent+=new MyListClass<int>.MyDelegate(RemoveHandler); 
      lst.Add(2542); 
      lst.Add(785); 
      lst.RemoveAt(1); 
     } 
     static void AddHandler() 
     { 
      Console.WriteLine("Объект добавлен в коллекцию"); 
     } 
     static void RemoveHandler() 
     { 
      Console.WriteLine("Объект удалён из коллекции коллекцию"); 
     } 
    } 
} 

对不起,我的英语不好。我不是说要为我做所有的实验,只给我想法,以及如何写这个的例子)

+0

一个简单的例子给你方向的想法去我没有看到有任何属性。 –

+1

恐怕说明不太清楚。哪个类(或类成员)是要应用于的属性? –

+0

我说,我不知道,我必须写什么属性,以及在哪里。你有什么想法? – user707895

回答

1

这个问题很难理解,但我想它想让你的装饰类或方法具有属性它指向一个存储某种事件数据的文件。

因此,这将是这个样子:

class SomeClass 
{ 
    [MyEventInfoAttribute(EventFile = "c:\\blah\\events.foo")] 
    void SomeMethod() 
    { 
    } 
} 

所以,你需要定义一个属性:

public class MyEventInfoAttribute : Attribute 
{ 
    public property string EventFile { get; set; } 
} 

你如何存储事件信息,并执行事件是由你。

您的代码将不得不使用反射来发现方法上的属性。

例如:

class SomeClass 
{ 
    [MyEventInfoAttribute(EventFile = "c:\\blah\\events.foo")] 
    void SomeMethod() 
    {  
     Type type = typeof(SomeClass); 
     MethodInfo method = type.GetMethod("SomeMethod"); 
     object[] atts = method.GetCustomAttributes(); 
     if (atts.Length > 0) 
     { 
      if (atts[0] is MyEventInfoAttribute) 
      { 
       string fileName = ((MyEventInfoAttribute)atts[0]).EventFile; 

       ... now open the file, read the event info, and use it ... 
      } 
     } 
    } 
} 

这是