2011-06-17 74 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 ... 
      } 
     } 
    } 
} 

這是