2016-07-29 84 views
-3

我有一个简短的问题。我有一个对象,我试图在另一个类中传递给另一个方法。C#将对象传递给不同的方法

public virtual void Geocode(ICustomer customer) 
    { 
     RouteObjects.Customer roCustomer = customer as RouteObjects.Customer; 

     if (customer != null) 
     { 
      RouteObjectsRepository.Geocode(roCustomer); 
      GeoCodeUpdateEventPublisher.UpdateGeoCustomer(roCustomer); 
     } 
    } 

我想在方法updategeocustomer中将roCustomer对象传递给GeoCodueUpdateEventPublisher。我的updateGeoCustomer看起来像这样

public virtual void UpdateGeoCustomer(object roCustomer) 
    { 
     Publish(roCustomer); 
    } 

我想知道这是否是正确的方式来传递此对象?然后我打算调用方法发布,它会看起来像这样。

protected virtual void Publish(object roCustomer) 
    { 

      PublishMessage publishMessage = CreatePublishMessage(roCustomer); 

      if (publishMessage != null) 
      { 
       Subscribers.AsParallel().ForAll(s => s.Send(publishMessage)); 
      } 

    } 

我只是想核实,如果我周围的正确

+2

“传递正确”是什么意思?你的代码是否工作 - 这是发现问题是否正确的主要方法 – Jamiec

+1

你的代码很好。 “正确性”取决于您的意图,即您是否希望Publish接受实现您的ICustomer接口的任何对象或实际对象。等等。如果是这样,那么你应该保留你的接口 –

回答

0

有什么本质上的“错误”周围将它作为一个“对象”,而不是它的类型或ICustomer通过这个对象接口,它确实取决于具体的用例和编码风格。如果你需要访问它的属性,并将它作为对象传递给对象,那么你需要将它转换为对象,然后这将成为一种不必要的,不好的方式来处理事情(即,如果你将它作为“对象”传递给它更新方法,然后它((MyObjectType)obj.Whatever =“Something”;然后你做一些问题)。

+0

因此,在程序执行GeoCode之后,我想要做的是将该roCustomer对象传递给我的更新以启动消息队列,以便另一个程序将其拾取。我只希望从客户跟踪号码x,y,cooridinates中找出某些东西。像这样的东西。 –

+0

从这个解释中,你应该把它作为它实际发生的类型传递给它,直到它被发送到你的消息队列中,此时你应该发送来自将被跟踪的对象的值。 – Yushatak

+0

RouteObjects.Customer是一个类,所以当我到达将对象中的项目放入队列的方法时,我正确地传递了这个信息,我做了roCustomer。我没有去访问对象内的项目。对不起,我只是可能不会正确理解 –

0

正确的做法是使用正确的类型声明接收函数。除非你的功能需要在ANY类型的参数上工作。

+0

好的方法 - 把他的措辞扩大,基本上是“正确的”,你想尽可能具体,只是放松类型的东西如果该函数旨在处理更通用的东西,则更通用。 – Yushatak