【发布时间】:2021-08-14 19:59:27
【问题描述】:
对象引用在 c# 中是如何工作的 - 我试过这个,我目前正在尝试让一个对象引用另一个对象实例。
我正在构建的课程中需要这个
public class TransactionalProducer
{
private readonly IMessageBusProducer producer;
public TransactionalProducer (IMessageBusProducer bus, bool hasTransactionInitialized)
{
producer = bus;
if(hasTransactionInitialized)
{
producer.InitTransactions();
}
producer.BeginTransaction();
}
}
看起来当我创建一个新的TransactionalProducer 时,producer 实例将被设置为一个新实例,其中值取自函数参数bus,而不是引用通过解析的那个构造函数。
如何确保当通过构造函数 public TransactionalProducer (IMessageBusProducer bus, bool hasTransactionInitialized) 实例化新的 TransactionalProducer 对象时,producer 设置为对 bus 的对象引用,而不是使用与函数参数bus相同的参数
【问题讨论】:
-
a,b,c 不是参考。它们是保存引用的变量。通过说 c = b,您将参考值从 b 复制到 c。但是随后您使用另一个字符串覆盖 b。
-
查看我对这个问题的回答stackoverflow.com/questions/65418824/…。你的三个文字字符串是objects。您的变量包含对这些对象的引用。当您在两个引用类型的变量之间进行赋值时,右侧变量所持有的引用被分配给左侧的变量。当你说
c=b时,c最终指向的是同一个对象b。当您重新分配b时,c不在乎。将引用类型变量视为其值是引用的值类型变量。 -
另外,忽略字符串是不可变的(它们是)这一事实,像你正在做的赋值不会改变右手变量所指的对象。在
c=b的末尾,没有更改任何对象。只有变量只有左侧发生变化(引用的副本存储在右侧的变量被复制过来) -
所以c#不可能这样做? @Flydog57
-
“这样做”什么?您可以通过引用将引用作为参数传递给函数(请参阅我对上面提到的问题的回答)。但是,您不能对引用类型变量进行 by reference 赋值。为什么你认为你想这样做?你想达到什么目的?