如何link两个不同的代表类?
How to link two delegates in different classes?
我有两个不同的 类,比如 Outer
和 Inner
。 Inner
的一个实例是 Outer
中的一个字段。我的目标是 link ActionInner
和 ActionOuter
;换句话说,当我为 ActionOuter
添加操作时,我希望它被添加到 ActionInner
。我该怎么做?
我的尝试无效,因为这两个操作都是空的:
class Program
{
static void Main()
{
Outer outer = new Outer();
void writeToConsole(double foo)
{
Console.WriteLine(foo);
}
// Here I expect to link the 'writeToConsole' action to 'inner' 'ActionInner'
outer.ActionOuter += writeToConsole;
// Here I expect an instance of 'inner' to output '12.34' in console
outer.StartAction();
Console.ReadKey();
}
}
class Inner
{
public Action<double> ActionInner;
public void DoSomeStuff(double foo)
{
ActionInner?.Invoke(foo);
}
}
class Outer
{
readonly Inner inner;
public Action<double> ActionOuter;
public void StartAction()
{
inner.DoSomeStuff(12.34);
}
public Outer()
{
inner = new Inner();
// Here I want to somehow make a link between two actions
inner.ActionInner += ActionOuter;
}
}
考虑为您的 class 使用 Properties。使用属性可以让您在 属性 被检索或设置新值时发生某些事情。
例如,如果我们为 ActionOuter
实现一个 属性,我们可以在每次设置 ActionOuter
时检查我们是否有一个 inner
并可能设置很值。
当您使用 setter(set accessor)(如下所示)时,您可以使用特殊关键字 value
,它表示在将 ActionOuter
分配给 last 时传递的值。这是您将用来设置私有 actionOuter
的值,如果需要,也可能是 inner.ActionInner
。
private Action<double> actionOuter;
public Action<double> ActionOuter{
get => actionOuter;
set{
// do something here, maybe set inner's value?
actionOuter = value;
}
}
将 ActionOuter
字段更改为 属性。像下面这样设置和获取;
public Action<double> ActionOuter
{
set => inner.ActionInner = value;
get => inner.ActionInner;
}
我有两个不同的 类,比如 Outer
和 Inner
。 Inner
的一个实例是 Outer
中的一个字段。我的目标是 link ActionInner
和 ActionOuter
;换句话说,当我为 ActionOuter
添加操作时,我希望它被添加到 ActionInner
。我该怎么做?
我的尝试无效,因为这两个操作都是空的:
class Program
{
static void Main()
{
Outer outer = new Outer();
void writeToConsole(double foo)
{
Console.WriteLine(foo);
}
// Here I expect to link the 'writeToConsole' action to 'inner' 'ActionInner'
outer.ActionOuter += writeToConsole;
// Here I expect an instance of 'inner' to output '12.34' in console
outer.StartAction();
Console.ReadKey();
}
}
class Inner
{
public Action<double> ActionInner;
public void DoSomeStuff(double foo)
{
ActionInner?.Invoke(foo);
}
}
class Outer
{
readonly Inner inner;
public Action<double> ActionOuter;
public void StartAction()
{
inner.DoSomeStuff(12.34);
}
public Outer()
{
inner = new Inner();
// Here I want to somehow make a link between two actions
inner.ActionInner += ActionOuter;
}
}
考虑为您的 class 使用 Properties。使用属性可以让您在 属性 被检索或设置新值时发生某些事情。
例如,如果我们为 ActionOuter
实现一个 属性,我们可以在每次设置 ActionOuter
时检查我们是否有一个 inner
并可能设置很值。
当您使用 setter(set accessor)(如下所示)时,您可以使用特殊关键字 value
,它表示在将 ActionOuter
分配给 last 时传递的值。这是您将用来设置私有 actionOuter
的值,如果需要,也可能是 inner.ActionInner
。
private Action<double> actionOuter;
public Action<double> ActionOuter{
get => actionOuter;
set{
// do something here, maybe set inner's value?
actionOuter = value;
}
}
将 ActionOuter
字段更改为 属性。像下面这样设置和获取;
public Action<double> ActionOuter
{
set => inner.ActionInner = value;
get => inner.ActionInner;
}