为什么构造函数以这种方式工作?

时间:2014-12-11 19:57:36

标签: c# activemq

对于使用activeMQ的类,我在c#中有一个构造函数,也可以是Java。该类被多次实例化,每次都发布在一个单独的主题上,由传递给构造函数的变量String destination定义,如下所示:

class Publisher
{
  // Class variables constructed in constructor then used from outside class
  public IConnection connection = null;
  public ISession session = null;
  public IMessageProducer producer = null;

  // Constructor
  public Publisher (String destination)
  {
    String user = "USER";
    String password = "PASSWORD";
    String host = "localhost";
    int port = Int32.Parse("61616");

    String brokerUri = "activemq:tcp://" + host + ":" + port;
    NMSConnectionFactory factory = new NMSConnectionFactory(brokerUri);

    connection = factory.CreateConnection(user, password);
    connection.Start();
    session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge);
    IDestination dest = session.GetTopic(destination);
    producer = session.CreateProducer(dest);
    producer.DeliveryMode = MsgDeliveryMode.NonPersistent;
  }

  public void Stop ()
  {
    producer.Send(session.CreateTextMessage("SHUTDOWN"));
    connection.Close();
    Console.ReadLine();
  }

  public void Publish(String data)
  {
    producer.Send(session.CreateTextMessage(data));
  }
}

问题是编译器如何知道将3个activeMQ公共变量connection, session, producer分配给相关实例?

即。从其他课程我可以打电话

Publisher pub1 = new Publisher("topic1");
Publisher pub2 = new Publisher("topic2");
Publisher pub3 = new Publisher("topic3");

然后

pub1.Publish("stuff1");
pub2.Publish("stuff2");
pub3.Publish("stuff3");

一切正常。 &#34;东西&#34;都发布到正确的主题,并且不需要显式传入3个公共activeMQ变量connection, session, producer,这些变量并不总是相同的,生成器和会话都使用不同的目标实例化... < / p>

无论如何,它有效,但我想更多地了解为什么,以及每个构造函数如何知道哪个实例。

1 个答案:

答案 0 :(得分:0)

无论destination变量如何,每个类实例都有自己的内存块。

关注constructor design后,我将sessiondestinationproducer个对象移到了方法中。这些都应该使用一个connection,可能现在在try / catch块中,尽管这可能也应该是一种方法。

在某个地方调用新方法,实例化了类。