2016-07-29 109 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

相關問題