订阅Generic类中的事件

时间:2014-04-27 22:06:21

标签: c# generics

我有一个Generic类,它继承自ObservableCollection。

我希望每当此集合中我的对象的某些特定属性发生更改时,都会在此类中获取通知,而不是添加或删除对象,而是编辑/更新对象。

我有一些载体类,它们将作为Type参数传递给这个泛型类。在更改这些类中的属性后,我想要引发一个事件,该事件将在此Generic类中进一步处理。

public class CustomCollectionGenericClass<T>:ObservableCollection
{
}

public class HelperClass
{
public string Name
{
       get{return _name;}
       set{_name=value;
          //raise some event which will be handled in custom collection class
          }
}
}

我不知道在这种情况下如何订阅和举起活动

1 个答案:

答案 0 :(得分:2)

您只能针对类的实例订阅非静态事件。您无法订阅某种类型的非静态事件。

在您的情况下,您可以做的是添加类型约束,确保约束强制该事件在该类上可用,然后订阅实例的事件:

public class GenClass<T> where T : RoutineClass
{
    public someMethod(T yourInstance)
    {
        yourInstance.EventToSubscribe += yourHandler;
    }
}

在这个例子中,我添加了一个接收实例的方法,因为你的泛型类中没有任何实例。这可能不是您所需要的,但无论哪种方式,您都需要一个实例来订阅事件。

一些澄清:当您有非静态事件时(根据您的代码),这适用。如果您有静态事件,则可以根据类型订阅事件。