2013-05-03 94 views
0

基本上我试图用Actions来做this。我需要做这样的事情,而不是一个属性,因为至少在其中一个实体引用另一个类的Action - 因为你只能添加/删除操作,而不是实际返回它们,我需要包装它在一个添加/删除而不是get。是否可以在添加/删除界面中使用操作?

interface Whatever 
{ 
    Action MyAction { get; } 
} 

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

我的项目依赖于特定平台库,所以我打算让我的类依赖于一个包装类的接口和每个平台的库上会被包裹在自己的讲座,直到我来到这工作得很好包装行动。

+0

你试过了吗?正如书面所述,这很好。你的链接是关于事件的,而不仅仅是为代表使用属性。 – 2013-05-03 16:24:48

+0

看起来像你写的应该工作得很好。我认为你正在考虑事件 - 动作就像其他任何普通的C#对象一样。 – Mason 2013-05-03 16:27:24

+0

您已经完成了类型为“Action”的***属性***。属性有一个或两个访问器,称为'get'和/或'set'。为了让***事件***改为在类型('Action')之前包含关键字'event'。事件有两个称为'add'和'remove'的访问器。下面是一个例子:'公共事件Action MyEvent {add {...} remove {...}}'。 “Action”类型是委托类型,因此可用于事件。由于它的返回类型为'void',并且没有类型参数是逆变的,所以我认为它是适合事件的类型。 – 2013-05-03 16:37:03

回答

1

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

现在对于evens来说它是一样的。在包装类中创建一个事件并将其呼叫重定向到内部类:

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

'add'和'remove'访问器的返回类型为'void',所以'return'语句不正确。 – 2013-05-03 16:41:01

+0

@Jeppe:我的stuppid复制粘贴错误。谢谢! – 2013-05-03 16:44:37

相关问题