簡體   English   中英

在 C# 中獲取特殊幀后創建指定類型的 object

[英]Create an object with specified type after getting special frame in C#

我的首選語言是 C#,但我的問題更抽象,答案在 OOP 的域中。我在 some.network 上有一個用戶定義的協議。 協議或網絡是什么並不重要。 只需考慮該協議有一個“ProtocolRxEventHandler”。 收到新幀時,在此處理程序中,我解釋消息的內容。 根據這些信息,我需要從 ClassA、ClassB 或 ClassC 類創建一個 object。

您可能會問,如何選擇我應該實例化哪種類型的 object。 嗯...首先,在 ProtocolRxEventHandler 中,我調用了一個解釋 function,它從 ClassBase 返回一個 object。 為什么是類庫? 因為收到的消息只包含所有類之間共有的最少信息,最好將其轉換為 BaseClass。 這個object中的其中一個字段定義了最終需要實例化的class的類型。 因此,在解釋之后,在 switch 語句中,根據基類 class 的類型字段,我決定需要創建類 A、B 或 C 中的哪一個。 創建它之后,我從 ClassBase 復制其他值並向代碼的相應部分報告從 A、B 或 C 創建了一個新的 object。

我認為我在 ProtocolRxEventHandler 中使用的 switch 語句有異味並且可以用更好的方式編寫。 但是我不知道怎么做? 任何的想法? 也許有一種方法可以擺脫 switch 語句並讓對象根據接收到的幀構造自己......我不知道,我不喜歡我的方法的主要原因是當聲明一個新的 class 時,說D級。 我需要更改我的代碼中的兩個部分,首先聲明 ClassD 本身,其次。 在 ProtocolRxEventHandler 的 switch 語句中添加新操作。

根據您的描述,我懷疑您可以重用任何現有解決方案,例如 ProtoBuf。

但是,如果您應該結合現有的協議定義(承認,其中 80% 的設計並不完美),您完全可以使用switch語句或任何等效語句。 因為無論如何你需要一些“標准 X”來回答“它應該是什么類型的實例”這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM