簡體   English   中英

C#TcpClient擴展,基類上轉換

[英]C# TcpClient extension, base class upconversion

我目前正在編寫一個能夠進行多線程客戶端處理的Tcp類。 因此,我必須擴展System.Net.Sockets中的TcpClient以獲得更多功能,例如直接編寫字符串等。 現在,在將TcpClient基類上轉換為TCP_ModifiedClient(擴展類)時,我有些困惑。
目前,我正在嘗試按以下方式復制所有屬性,但是,出現錯誤,即只能在未連接時分配套接字。
必須將上轉換的TcpClient通過設計連接。

財產復制守則:
PropertyDescriptorCollection sp = TypeDescriptor.GetProperties(new TcpClient()); PropertyDescriptorCollection tp = TypeDescriptor.GetProperties(new TCP_ModifiedClient()); foreach (PropertyDescriptor pdt in tp) foreach (PropertyDescriptor pds in sp) if (pdt.Name == pds.Name) pdt.SetValue(this, pds.GetValue(client));

有什么優雅的解決方案嗎? 在最壞的情況下,我將在實現TcpClient的所有公共方法的同時將類型為TcpClient的私有變量添加到TCP_ModifiedClient類,但是我希望通過繼承對擴展名進行排序。

我衷心希望有人能夠提供幫助。

*編輯*
好的。 我可能沒有精確地表達自己。
如前所述,我正在編寫一個小類,該類能夠提供一種處理服務器/客戶端應用程序的便捷方法。 為此,我實現了一個TcpClient替換類,該類添加了一些功能,例如在類中向TcpClient的基本流寫入/讀取,自動建立AES安全連接等。 當前,此替換類TCP_ModifiedClient繼承自TcpClient。 由於.NET網絡功能使用TcpClient,因此我必須實現從TcpClient到TCP_ModifiedClient的轉換方法。 由於我當前的TCP_ModifiedClient實現是從TcpClient繼承的,因此我最初打算向TCP_ModifiedClient添加一個構造函數,並接受TcpClient作為參數,然后將其作為TCP_ModifiedClient的基類。 這顯然是行不通的,因此,在我上面給出的代碼中,我嘗試將TcpClient的所有屬性分配給TCP_ModifiedClient。
希望這一點更加清楚。 現在是上午1:15,因此對您的重復/思維障礙感到抱歉。

這是一個有趣的問題,因為不清楚誤解是什么。 似乎您想創建一個看起來像TcpClient的類,但其功能卻有所不同。 做到這一點的方法是自己編寫一個此類並實現。 您可以包裝一個TcpClient這樣。

在.NET中,無法復制屬性來模仿另一個對象。 (您是JavaScript開發人員嗎?)。NET中的類型成員是靜態定義的,並且不可更改。 由於TcpClient看起來不像是從您繼承的,因此您也無法使用繼承來實現您的目標。 您必須實現一個新的類。

這是正確的方法。 如果繼承只是共享代碼和減少鍵入的一種方式,則組合優先於繼承。 不要拉入所有TcpClient成員。 只需公開您需要的成員,然后公開即可。 從設計的角度來看,“在最壞的情況下szenario”證明了這種最壞的情況是最好的情況。

暫無
暫無

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

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