对象 A 的属性通过对象 B 的属性作为引用而改变
Object A properties change through Object B properties as references
假设我有对象 A,我想将其属性分配给对象 B,并且通过修改对象 B,我希望对象 A 的引用类型属性也发生变化。对象不一样。
Class A
{
public string Link1 { get; set;}
}
Class B
{
public string Link { get; set;}
}
public void ProcessLink(ref B b)
{
b.Link = serviceX.GetLink(); // this should set Obj A.Link value too
}
代码应该是什么样的?这样对象 A 属性 Link1 将通过调用
来更新
var a = new A(){ Link1 = null};
var b = new B() {Link = a.Link1};
ProcessLink(ref B);
现在 a.Link1 等于 b.Link
您描述的 B
是 A
的 代理。一种方法是为 class B
提供对 A
实例的引用。为 B
编写实际上在 A
上运行的 getter 和 setter,而不是自动属性。您可以给 A
一个方法来获取 B
.
的实例
此模式的一个示例是 CancellationTokenSource
(类似于 A
)和 CancellationToken
(B
)。令牌是公开已取消的源 属性 的代理,但不让您取消它。
考虑让 B
成为 A
实现的接口是否更有意义。
假设我有对象 A,我想将其属性分配给对象 B,并且通过修改对象 B,我希望对象 A 的引用类型属性也发生变化。对象不一样。
Class A
{
public string Link1 { get; set;}
}
Class B
{
public string Link { get; set;}
}
public void ProcessLink(ref B b)
{
b.Link = serviceX.GetLink(); // this should set Obj A.Link value too
}
代码应该是什么样的?这样对象 A 属性 Link1 将通过调用
来更新var a = new A(){ Link1 = null};
var b = new B() {Link = a.Link1};
ProcessLink(ref B);
现在 a.Link1 等于 b.Link
您描述的 B
是 A
的 代理。一种方法是为 class B
提供对 A
实例的引用。为 B
编写实际上在 A
上运行的 getter 和 setter,而不是自动属性。您可以给 A
一个方法来获取 B
.
此模式的一个示例是 CancellationTokenSource
(类似于 A
)和 CancellationToken
(B
)。令牌是公开已取消的源 属性 的代理,但不让您取消它。
考虑让 B
成为 A
实现的接口是否更有意义。