是否可以在添加/删除界面中使用Actions?

时间:2013-05-03 16:21:41

标签: c# events interface delegates wrapper

基本上我正在尝试用动作做this。我需要做类似的事情,而不是属性,因为至少有一个具体来自另一个类的Action被引用 - 因为你只能添加/删除到Actions而不实际返回它们我需要将它包装在一个添加/删除而不是获取。

interface Whatever
{
    Action MyAction { get; }
}

class WhateverConcretion : Whatever
{
    Action MyAction
    {
        get { return SomeLibraryClass.StaticAction; }
    }        
}

我的项目依赖于特定于平台的库,因此我计划让我的类依赖于包装类的接口,并且每个平台的库都将包装在它自己的类中 - 这一切正常,直到我开始包装Actions。 / p>

1 个答案:

答案 0 :(得分:2)

如果您创建了一个包装器,那么将内部类的成员发布到外部世界是正常的,最好使用该成员的相同名称和类型。包装方法很简单:只需创建另一个方法来调用内部类的te方法,传递其参数并返回其值。对于属性相同:创建属性,根据需要使用getter和setter,并调用内部实例属性的getter和setter。

现在对于evens来说,这是一回事。在包装器类中创建一个事件,并将其调用重定向到内部类:

public event Action MyAction
{
    add 
    { 
         SomeLibraryClass.StaticAction += value;
    }
    remove
    { 
         SomeLibraryClass.StaticAction -= value;
    }
}