首页 > 解决方案 > 如何在 c# 中引用特定实例?

问题描述

对象引用如何在 c# 中工作 - 我试过这个,我目前正在尝试让一个对象引用另一个对象实例。

我正在建设的课程中需要这个

    public class TransactionalProducer 
    {
        private readonly IMessageBusProducer producer;

        public TransactionalProducer (IMessageBusProducer bus, bool hasTransactionInitialized)
        {
            producer = bus;
            if(hasTransactionInitialized)
            {
                producer.InitTransactions();
            }
            producer.BeginTransaction();
        }
  }

看起来当我创建一个新实例时TransactionalProducerproducer实例将被设置为一个新实例,其中的值取自函数参数bus,而不是通过构造函数解析的引用。

如何确保TransactionalProducer通过构造函数实例化新对象 时将public TransactionalProducer (IMessageBusProducer bus, bool hasTransactionInitialized)producer设置为对的对象引用,而不是使用与函数参数相同的参数bus创建新对象IMessageBusProducerbus

标签: c#reference

解决方案


字符串对象是不可变的:它们在创建后无法更改。b = "let me rewrite this" 在 hip 中创建了一个新对象并将该对象的地址分配给 b。c 仍然有旧对象的地址。

如果要绑定两个变量,请尝试使用引用。

  string b = "This is changed";
    ref string c =  ref b;
    Console.WriteLine(c);
    b = "let me rewrite this";
    Console.WriteLine(c);
    b = "let me rewrite this again";
    Console.WriteLine(c);
    c = "let me reverse";
    Console.WriteLine(b);
    Console.WriteLine(c);

输出

This is changed
let me rewrite this
let me rewrite this again
let me reverse
let me reverse

我不明白要达到什么目标,但试试这个,它可能对你有用。

public TransactionalProducer (ref IMessageBusProducer bus, bool hasTransactionInitialized)

它会到达您的内部总线生产者,但我不确定它是否会导致内存泄漏。


推荐阅读